【发布时间】:2018-12-07 02:55:19
【问题描述】:
我已经为令牌验证实现了一个动作过滤器属性,如果令牌无效,那么 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
);
}
}
【问题讨论】:
-
整个 HTML 页面是什么样子的?它返回什么部分/视图?另外请在您使用此
TokenValidationAttribute的地方添加一个控制器/操作,这可能会有所帮助。 -
请查看更新后的问题。
-
您是否在控制器级别或您的
FunctionToVerifyToken()所在的任何位置使用了[Authorize]属性? -
尝试格式化字符串内容为:StringContent(Json.Encode(new { message = "Unauthorized user" }), Encoding.UTF8, "application/json");
-
[Authorize]属性未在 webapi 中的任何地方使用,我已将字符串内容格式化为StringContent(Json.Encode(new { message = "Unauthorized user" }), Encoding.UTF8, "application/json")但仍返回整个 html 页面。
标签: asp.net asp.net-mvc asp.net-web-api