c# webapi 带请求头的跨域处理
时间: 2023-07-19 18:23:03 浏览: 255
在 C# 的 Web API 中,可以通过添加自定义的消息处理程序来实现带请求头的跨域处理。以下是一个示例代码:
```
public class CorsHandler : DelegatingHandler
{
private const string Origin = "Origin";
private const string AccessControlRequestMethod = "Access-Control-Request-Method";
private const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
private const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
private const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Headers.Contains(Origin))
{
var origin = request.Headers.GetValues(Origin).FirstOrDefault();
if (request.Method == HttpMethod.Options)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add(AccessControlAllowOrigin, origin);
var accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
if (accessControlRequestMethod != null)
{
response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
}
var requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
if (!string.IsNullOrEmpty(requestedHeaders))
{
response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
}
var tcs = new TaskCompletionSource<HttpResponseMessage>();
tcs.SetResult(response);
return tcs.Task;
}
else
{
return base.SendAsync(request, cancellationToken).ContinueWith(task =>
{
var response = task.Result;
response.Headers.Add(AccessControlAllowOrigin, origin);
return response;
});
}
}
else
{
return base.SendAsync(request, cancellationToken);
}
}
}
```
在上面的代码中,我们创建了一个名为 `CorsHandler` 的自定义消息处理程序,它会检查请求头中是否包含 origin。如果包含 origin,它会添加相应的响应头以允许跨域请求。
在处理 HTTP OPTIONS 请求时,我们会检查请求头中是否包含 Access-Control-Request-Method 和 Access-Control-Request-Headers,如果包含,我们会将其添加到响应头中。如果是其他类型的 HTTP 请求,我们会继续执行基础的消息处理程序,并在结果中添加 Access-Control-Allow-Origin 响应头。
要使用此自定义消息处理程序,请将其添加到 Web API 的配置中:
```
config.MessageHandlers.Add(new CorsHandler());
```
这样就可以实现带请求头的跨域处理了。
阅读全文