如何使用HttpClient进行OPTIONS请求

10

如何使用System.Net.Http.HttpClient发送OPTIONS请求

HttpClient的公开方法

  • DeleteAsync: 发送DELETE请求
  • GetAsync: 发送GET请求
  • PostAsync: 发送POST请求
  • PutAsync: 发送PUT请求
  • 还有一些其他方法.....

我原本期望有一个OptionsAsync方法

   switch (httpMethod) {
      case HTTP_METHODS.DELETE:
       {
        httpResponseMessage = httpClient.DeleteAsync(uri).Result;
        break;
       }
      case HTTP_METHODS.GET:
       {
        httpResponseMessage = httpClient.GetAsync(uri).Result;
        break;
       }
      case HTTP_METHODS.POST:
       {
        httpResponseMessage = httpClient.PostAsync(uri, httpContent).Result;
        break;
       }
      case HTTP_METHODS.PUT:
       {
        httpResponseMessage = httpClient.PutAsync(uri, httpContent).Result;
        break;
       }
      case HTTP_METHODS.OPTION:
       {
        //not sure what method to call on httpclient here to make Options request
        httpResponseMessage = httpClient.PutAsync(uri, httpContent).Result;
        if (httpResponseMessage.Headers.Contains("X-CSRF-TOKEN")) {
         IEnumerable < string > headerValues = httpResponseMessage.Headers.GetValues("X-CSRF-TOKEN");
         csrfToken = headerValues.FirstOrDefault();
        }
        break;
       } 
     }

1
你看过这个吗:https://dev59.com/vmw15IYBdhLWcg3wWqj- - Edney Holder
2个回答

9

对于那种方法(例如OPTIONSHEAD),没有包装器,但是您可以像这些包装器一样使用SendAsync

var request = new HttpRequestMessage(HttpMethod.Options, "url");
var result = await _httpClient.SendAsync(request);

0
为了获得预期的响应,您必须确保在请求中设置“Origin”标头,如下所示:
using var client = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Options, "url");
message.Headers.Add("Origin", "http://example.com");
var response = await client.SendAsync(message);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接