允许在web api中使用自定义标头

Thi*_*dio 2 http-headers asp.net-web-api

我需要允许一个名为"secretToken"的自定义标头.每次调用我的webapi,用户都应该传递这个标题.

我找了一种方法来做到这一点,但我找不到一个简单的方法.如何允许此自定义标头?

Bad*_*dri 5

你提到'允许'意味着从客户端传递?哪个客户?

如果是JavaScript,你可以做这样的事情.

$.ajax({
    type: 'GET',
    url: '/api/values',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    headers: { 'X-My-Secret-Token': 'Token' },
    success: function (data) {

    }
});
Run Code Online (Sandbox Code Playgroud)

如果是.NET客户端,你可以做这样的事情.

string url = "http://www.myurl/api/values";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-My-Secret-Token", "Token");

var message = client.GetAsync(url).Result;
Run Code Online (Sandbox Code Playgroud)

在Web API中,您可以HttpRequestMessage从管道中的任何组件读取对象中的标头.例如,您可以从这样的处理程序中读取标题.

public class MyHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(
                                       HttpRequestMessage request,
                                             CancellationToken cancellationToken)
    {
        var headers = request.Headers;
        if (headers.Contains("X-My-Secret-Token"))
        {
             string token = headers.GetValues("X-My-Secret-Token").First();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Thi*_*dio 5

在.config文件中还有一件事:

    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept,auth-key" />
        </customHeaders>
    </httpProtocol>
Run Code Online (Sandbox Code Playgroud)