当前位置: 首页 > 知识库问答 >
问题:

在标头C#中设置If-Match

雍阳
2023-03-14

我有Odata服务,为了执行PUT,我们需要在Post man I giving中设置标题,如果匹配:,如下所示

如何在Odata服务调用中设置此If Match以执行PUT操作。我试过下面的

 private async Task<HttpResponseMessage> PutJsonAsync(string messageBody,string B_Code)
 {
 string userName = ConfigurationManager.AppSettings["Username"];
 string password = ConfigurationManager.AppSettings["Password"];
 string BaseURL = ConfigurationManager.AppSettings["BaseURL"];

  try
 {
   using (var httpClient = new HttpClient())
  {
   var request = new StringContent(messageBody, Encoding.UTF8, "application/json");
   string apiUrl = "SAM('" + B_Code + "')";
   request.Headers.ContentType = new MediaTypeHeaderValue("application/json");
   request.Headers.TryAddWithoutValidation("If-Match", "*");
   var url = string.Format("{0}{1}", BaseURL, apiUrl);
   var creds = userName + ":" + password;
   var credentials = Encoding.ASCII.GetBytes(creds);
   httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));

   response = await httpClient.PutAsync(new Uri(url), request);
 }
}
catch (Exception ex)
{
 throw ex;
  }
   return response;
  }

但它不工作并抛出错误501:未实现

'响应{StatusCode: 501,原因短语:'未实现',版本:1.1,内容:系统。网。https。流内容,标题:

OData-Version: 4.0日期:周一,2017 20:42:2810月30日格林尼治标准时间设置Cookie: JSESSIONID=XYZ;路径=/;安全;HttpOnly设置Cookie: XYZ;PATH=/;安全;HTTPONLY服务器:Apache-Coyote/1.1变体:接受编码连接:保持活力内容长度:277内容类型:应用程序/json;odata.metadata=最小}}系统。网。Http。Http响应消息'

共有1个答案

拓拔骁
2023-03-14

您的“请求”对象是您的内容对象,而不是HttpRequestMessage对象。我是怎么意识到的?ContentType在HttpRequestMessage上不可用。

如果Match不是内容级别的标题(我不知道Microsoft为什么会做出这种区分)。您不能将其添加到此处,必须将其添加到请求标头。如果将其添加到content对象,则会忽略它。

像这样的方法应该会奏效:

string apiUrl = "SAM('" + B_Code + "')";
var url = string.Format("{0}{1}", BaseURL, apiUrl);
var creds = userName + ":" + password;
var credentials = Encoding.ASCII.GetBytes(creds);
var request = new HttpRequestMessage(HttpMethod.Put, new Uri(url));
request.Content = new StringContent(messageBody, Encoding.UTF8, "application/json");
request.Headers.TryAddWithoutValidation("If-Match", "*");
request.Headers.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));

response = await httpClient.SendAsync(request);
 类似资料:
  • 我有一个由Tomcat托管的静态网站。 如何为我的网站设置标头,例如: 它们都是静态文件,而不是任何servlet应用程序。

  • 问题内容: 在使用XMLHttpRequest进行AJAX调用时,似乎无法从JavaScript更改大多数请求标头。请注意,必须在Gecko浏览器中调用when。设置_Referer时_ ,它没有设置(我查看了使用Firebug和Tamper Data发送的请求标头)。当我设置User-Agent时,它完全搞砸了AJAX调用。但是,设置接受和_内容类型_确实可以。我们是否无法在Firefox 3中

  • 问题内容: 我一直在尝试使用axios向National Park Service API发出GET请求,并尝试了几种方法将请求标头中的API密钥设置为无效。任何帮助将不胜感激。 我努力了: 和 都返回401。当我在Postman中发送GET请求时工作,我在密钥字段中输入Authorization,在值字段中输入我的API密钥。 谢谢。 问题答案: 此问题是由浏览器中的CORS OPTIONS请求

  • 如何在nodejs中发送文件,我正在创建一个页面应用程序,所以我只想abcd.html页面首次按要求交付,这是我的代码 app.js 对页面的响应 发送后,它总是给出无法设置的标题,下面是控制台输出 错误:SendStream禁止。SendStream出错(/home/pitu/CODING/NODE-PROJECTS/chichat/NODE\u modules/express/NODE\u m

  • 我正在使用ASP.NET WebApi创建一个RESTful API。我正在我的一个控制器中创建一个PUT方法,代码如下所示: 当我通过AJAX使用浏览器将其放到该位置时,它给出了以下例外情况: 标头名称使用不当。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpReponseMessage一起使用,内容标头与HttpContent对象一起使用。 但是不是一个完全有效的