繁体   English   中英

如何在Asp.Net-MVC中添加自定义HTTP标头

[英]How to add custom HTTP Headers in Asp.Net-MVC

我创建了一个自定义处理程序,如下所示:

public class SitHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        Debug.WriteLine("Process request");
        // Call the inner handler.
        var response = await base.SendAsync(request, cancellationToken);
        Debug.WriteLine("Process response");
        return response;
    }
}

并在WebApiConfig类中WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
      // Web API configuration and services

      //Delegating Handlers
      config.MessageHandlers.Add(new SitHandler());

      // Web API routes
      config.MapHttpAttributeRoutes();

      /*config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );*/
    }
}

并有以下路线:

[RoutePrefix("")]
public class SignInController : Controller
{
    [Route("", Name = "Default")]
    public ActionResult Index()
    {
      return View();
    }
}

现在,当我启动服务器时,它会按预期显示正确的页面: 在此输入图像描述

但是请求并没有通过处理程序,为什么?
什么是内心手?

// Call the inner handler.
var response = await base.SendAsync(request, cancellationToken);

对于MVC,您需要添加ActionFilterAttribute

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class MyCustomFilter : System.Web.Mvc.ActionFilterAttribute {
    public override void OnActionExecuted(ActionExecutedContext context) {
        Debug.WriteLine("Process response");
        //From here you have access to the response to process what you need
        //eg: context.HttpContext.Response.Headers.Add("MyCustomHeaderName","value");

        base.OnActionExecuted(context);
    }
}

然后你可以在动作中使用你的属性......

[MyCustomFilter]
[Route("", Name = "Default")]
public ActionResult Index(){...}

,班级......

[MyCustomFilter]
[RoutePrefix("")]
public class SignInController : Controller {...}

,或全局设置......

public class FilterConfig {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
        filters.Add(new MyCustomFilter());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM