Webapi возвращает HTML-страницу вместо JSON - PullRequest
0 голосов
/ 28 июня 2018

Я реализовал атрибут фильтра действий для проверки токена, и если токен недействителен, ответ 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 голосов
/ 28 июня 2018

Я думаю, что в вашем коде отсутствуют следующие строки в вашем фильтре действий TokenValidationAttribute.cs. base.OnActionExecuting(actionContext); return; Что это будет делать, так это получить ваш форматированный результат и отобразить ваш результат, а не отображать представление.

0 голосов
/ 28 июня 2018

Я вернул ответ как:

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

и он вернул "Unauthorized user" вместо всей HTML-страницы.

0 голосов
/ 28 июня 2018

В Global.ascx.cs добавить следующую строку

  • GlobalConfiguration.Configure (FilterConfig.Register);

В методе регистрации FilterConfig.cs

    public static void Register(HttpConfiguration config)
    {
        config.Filters.Add(new TokenValidationAttribute());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...