Webapi 返回 html page 而不是 json



我已经为令牌验证实现了操作过滤器属性,如果令牌无效,则应从此操作过滤器返回 api 响应。

public class TokenValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
bool isValidToken = FunctionToVerifyToken();
if (!isValidToken ))
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)
{
Content = new StringContent("Unauthorized user")
};
return;
}
}
}

响应:它转到_layout.cshtml并返回整个html页面,而不仅仅是返回"未经授权的用户"

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Sign in</title>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
<link href="/Content/styles.css" rel="stylesheet"/>
<script src="/Scripts/modernizr-2.8.3.js"></script>
...

更新:我使用此令牌的控制器:

public class ServiceController : ApiController
{
[AcceptVerbs("GET", "POST")]
[HttpGet]
[HttpPost]
[TokenValidation]
public object ChangePassword()
{
//my logic is token is valid. It returns json data and works fine.
}
}

返回的视图是登录页面。

我的WebApiConfig.cs

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{action}/{id}",
defaults: new { controller = "Service", id = RouteParameter.Optional },
constraints: null
);
}
}

在 Global.ascx 中.cs添加以下行

  • GlobalConfiguration.Configure(FilterConfig.Register(;

在 FilterConfig 中.cs注册方法

public static void Register(HttpConfiguration config)
{
config.Filters.Add(new TokenValidationAttribute());
}

我认为您的代码在 TokenValidationAttribute.cs 操作过滤器中缺少以下行。base.OnActionExecuting(actionContext); return;这将要做的是,它将获得格式化的结果并显示您的结果,而不是显示视图。

我返回的响应为:

actionContext.Response = actionContext.Request.CreateResponse<string>(HttpStatusCode.BadRequest, "Unauthorized user");

它返回"Unauthorized user"而不是整个 HTML 页面。

最新更新