我已经实现了用于令牌验证的操作过滤器属性,如果令牌无效,则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
);
}
}
答案 0 :(得分:0)
在Global.ascx.cs中添加以下行
在FilterConfig.cs注册方法中
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new TokenValidationAttribute());
}
答案 1 :(得分:0)
我认为您的代码在TokenValidationAttribute.cs操作过滤器的以下行中缺少此代码。
base.OnActionExecuting(actionContext); return;
这样做是将获取格式化的结果并显示结果,而不是显示视图。
答案 2 :(得分:0)
我返回的回复为:
actionContext.Response = actionContext.Request.CreateResponse<string>(HttpStatusCode.BadRequest, "Unauthorized user");
,它返回"Unauthorized user"
而不是整个html页面。