나는 다음과 나를 위해 잘 작동합니다 ("4.0 클라이언트 프로파일"비트에 대해 확실하지 생각) 사용
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)
{
bool isCorsRequest = request.Headers.Contains(Origin);
bool isPreflightRequest = request.Method == HttpMethod.Options;
if (isCorsRequest)
{
if (isPreflightRequest)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
if (accessControlRequestMethod != null)
{
response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
}
string 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;
}
return base.SendAsync(request, cancellationToken).ContinueWith(t =>
{
HttpResponseMessage resp = t.Result;
resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
return resp;
});
}
return base.SendAsync(request, cancellationToken);
}
}
하는 응용 프로그램 시작 (Global.asax에 광산) 당신에 등록하는 것을 잊지 마십시오
GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());
나는 user3409920에서 설명한 것과 같은 문제에 직면하고 있습니다. 귀하의 솔루션을 시도하는 동안 그것은'return base.SendAsync (...)'진술에 StackOverFlow 예외를 throw합니다. if (isCorsRequest). 그걸 해결하는 것에 대해 어떤 생각이 있습니까 ?? –
안녕하세요, 위의 이러한 return 문 중 하나만 사용해보십시오. 보시다시피 첫 번째 메시지는 헤더를 함께 반환하고 다른 메시지는 반환하지 않습니다. 귀하의 의견을 알려주십시오. 건배 – felipekm