我已经为令牌验证实现了操作过滤器属性,如果令牌无效,则应从此操作过滤器返回 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 页面。