Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient头请求参数始终为空_C#_Asp.net Web Api_Httpclient_Http Head - Fatal编程技术网

C# HttpClient头请求参数始终为空

C# HttpClient头请求参数始终为空,c#,asp.net-web-api,httpclient,http-head,C#,Asp.net Web Api,Httpclient,Http Head,我正在构建一个用于应用程序更新的WebAPI服务,我编写了一个HEAD-and-GET方法,这两个方法都接受一个Version对象,它表示客户端升级到的版本 我已经为应用程序编写了一个客户端,但是在请求中传递version对象时遇到了一些问题,对于HEAD请求,我有以下内容 var httpClient = this.CreateHttpClient(this.ServiceBaseAddress, handler); httpClient.DefaultRequestHeaders.Accep

我正在构建一个用于应用程序更新的WebAPI服务,我编写了一个HEAD-and-GET方法,这两个方法都接受一个Version对象,它表示客户端升级到的版本

我已经为应用程序编写了一个客户端,但是在请求中传递version对象时遇到了一些问题,对于HEAD请求,我有以下内容

var httpClient = this.CreateHttpClient(this.ServiceBaseAddress, handler);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");

JsonSerializerSettings settings = new JsonSerializerSettings
                                        {
                                            NullValueHandling = NullValueHandling.Ignore
                                        };
var serializedVersion = JsonConvert.SerializeObject(version, settings);

var requestUri = string.Format(
    "{0}{1}/?version={2}",
    this.ServiceBaseAddress,
    this.AddressSuffix,
    serializedVersion);

var request = new HttpRequestMessage(HttpMethod.Head, requestUri);
if (from.HasValue)
{
    request.Headers.Range = new RangeHeaderValue(from, to);
}
var response = await httpClient.SendAsync(request);
现在当我调试的时候。已到达服务方法断点,但
version
参数始终为
null
,服务方法签名如下

public async Task<HttpResponseMessage> Head(Version version)
{
...
}
公共异步任务头(版本)
{
...
}
谁能解释我做错了什么

编辑: 做了更多的分析,我从服务器得到了415个不受支持的媒体类型响应。我添加了
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”、“应用程序/json”)但是没有区别,有什么想法吗?(注意:我通过上述方法或使用建议的
version.ToString()
获得此响应)

根据,Web API仅从URI获取“简单”类型(字符串、int、日期时间等)的值,
version
不在其中。我不相信使用
[FromUri]
属性会起作用,因为
版本
是不可变的(只读属性),所以我认为Web API不知道如何绑定它


因此,我认为您唯一的选择是,它允许您明确地告诉框架如何将字符串转换为
System.Version
,或者如果您仅在几个操作中使用它,请保持简单并使用字符串参数类型,并在操作中使用
Version.TryParse

检查到达服务器的实际Url,查看版本查询参数是否存在。然后。。。顺便提一下Json序列化对象不是查询字符串参数的好候选对象。他们往往有各种各样的非法角色。改为version.ToString()怎么样?