Webapi返回html页面而不是json

时间:2018-06-28 06:15:18

标签: asp.net asp.net-mvc asp.net-web-api

我已经实现了用于令牌验证的操作过滤器属性,如果令牌无效,则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
            );

        }
}

3 个答案:

答案 0 :(得分:0)

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

  • GlobalConfiguration.Configure(FilterConfig.Register);

在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页面。