3

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

我搜索了一种方法来做到这一点,但我找不到一个简单的方法。我怎样才能允许这个自定义标题?

4

2 回答 2

6

.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>
于 2013-07-17T14:18:40.633 回答
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) {

    }
});

如果是 .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;

在 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();
        }
    }
}
于 2013-07-17T02:10:44.467 回答