如何在 asp.net web api 1.x 中使用 SupportsCredentials?
Posted
技术标签:
【中文标题】如何在 asp.net web api 1.x 中使用 SupportsCredentials?【英文标题】:how to use SupportsCredentials in asp.net web api 1.x? 【发布时间】:2019-04-12 07:30:12 【问题描述】:大家。我的英语很差。希望前辈们能理解。 我今天在开发时遇到问题:技术堆栈是 angular 6.x 和 Web API 1.x。我在角度拦截器中使用了 Withcredentials = true 。如以下代码所示:
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>>
req = req.clone(
withCredentials: true,
url: AppIdConfig.serverUrl + req.url,
headers: new HttpHeaders(
'Content-Type': 'application/json',
'Accept': 'application/json'
)
);
// ... other code
对于Cros,我的C#代码如下:
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)
return Task.Factory.StartNew<HttpResponseMessage>(() =>
HttpResponseMessage 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);
return response;
, cancellationToken);
else
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
HttpResponseMessage resp = t.Result;
resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
return resp;
);
else
return base.SendAsync(request, cancellationToken);
希望能得到您的帮助,谢谢!
【问题讨论】:
【参考方案1】:您必须在 ASP.NET Web API 项目中初始化 CORS 策略。 它允许您接受或拒绝(取决于您的政策)来自您客户的请求。
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
此链接可能对您有所帮助;)
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效 是web api1.x 。@RSadocchi 的回答是可以的。例如:response.Headers.Add("Access-Control-Allow-Credentials", "true");【参考方案2】:尝试将密钥 Access-Option-Allow-Credentials: true 添加到 HttpHeaders
【讨论】:
什么意思:response.Headers.Add("Access-Option-Allow-Credentials", "true");它不起作用... 将“Access-Option-Allow-Credentials”更改为“Access-Control-Allow-Credentials”。谢谢!以上是关于如何在 asp.net web api 1.x 中使用 SupportsCredentials?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.Net WebForm 中调用 Web API?
如何在使用 HttpClient 使用 Asp Net Web Api 的 Asp Net Mvc 中提供实时数据?