如何在 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 中提供实时数据?

如何使 ASP.NET Web API Web 服务在本地网络中可用

如何在asp.net核心中从客户端调用web api方法?

如何创建 ASP.NET Web API 网址?

如何在 asp.net web apis 中启用 cors 选项。?