我应该如何为 dnx451 和 dnxcore50 引用 HttpClient?

Posted

技术标签:

【中文标题】我应该如何为 dnx451 和 dnxcore50 引用 HttpClient?【英文标题】:How should I reference HttpClient for dnx451 and dnxcore50? 【发布时间】:2015-06-12 00:38:16 【问题描述】:

我应该如何使用project.json 文件引用HttpClient? 我希望这两个框架都能工作:dnx451dnxcore50

这是我目前对project.json 文件的尝试。 (我已经删除了不相关的部分。)


  "dependencies": 
    "Microsoft.Net.Http": "2.2.29",
    "Microsoft.Net.Http.Headers": "1.0.0-beta4",
    "System.Net.Http": "4.0.0-beta-22816"
  ,
  "frameworks": 
    "dnx451": 
      "frameworkAssemblies": 
        "System.Net.Http": "4.0.0.0"
      
    ,
    "dnxcore50":  
  

发现我列出的依赖项是一个反复试验的过程。

使用此project.json 文件,dnxcore50 上下文可以正确解析此示例代码块中的所有类,但无法使用dnx451 上下文解析HttpRequestMessageHttpMethodMediaTypeWithQualityHeaderValue

var request = new HttpRequestMessage(HttpMethod.Get, "...");
request.Headers.Accept.Clear();
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/..."));
var response = await client.SendAsync(request);
var model = await response.EnsureSuccessStatusCode().Content.ReadAsAsync<SomeModel>();

【问题讨论】:

见this @YuvalItzchakov 除了HttpContent 上的ReadAsAsync 扩展方法外,这一切都在dnx451 上下文中工作。它是System.Net.Http 命名空间中HttpContentExtensions 类的成员。知道我需要什么框架程序集或依赖项吗?顺便说一句,这是一个很大的帮助! @YuvalItzchakov 在您的帮助下,我想通了。看我的回答。 太棒了。很高兴它成功了。 【参考方案1】:

截至发帖时(2015 年 6 月 11 日),这对dnx451dnxcore50 都适用。


  "dependencies": 
    "Microsoft.AspNet.WebApi.Client": "5.2.3"
  ,
  "frameworks": 
    "dnx451": 
      "frameworkAssemblies": 
        "System.Net.Http": "4.0.0.0"
      
    ,
    "dnxcore50": 
      "dependencies": 
        "System.Net.Http": "4.0.0-beta-22816"
      
    
  

【讨论】:

您需要每个框架的参考吗?***依赖项不会同时适用于这两个框架吗?我在依赖项中只有“System.Net.Http”:“4.0.0-beta-23008”,并且在项目列表中显示为 dnx451 和 dnxcore50 引用。 @jonas 我刚刚确认,如果您按照您所说的进行操作,HttpClient 将无法在 dnx451 和 dnxcore50 中都可以访问。尝试编写在您所说的配置项目中使用它的代码。 @Timothy Shields - 我已经做到了,除了它是 Microsoft.Net.HttpClient 并且它工作正常。 @ShaneCourtrille 请注意问题和答案的日期。【参考方案2】:

我将 Timothy 的回答标记为很有帮助,因为它引导我走上了正确的道路,但这个问题/答案也是几个月前的事了。从那时起,ASP.NET5 已经 RCed。这就是现在对我有用的方法:


  "version": "1.0.0-*",

  ...

  "dependencies": 
    "System.Runtime": "4.0.21-beta-23516",
    "Newtonsoft.Json": "6.0.6",
    "Microsoft.CSharp": "4.0.1-beta-23516",
    "System.Net.Http": "4.0.1-beta-23516"
  ,
  "frameworks": 
    "dnx451": 
      "dependencies": 
      
    ,
    "dnxcore50": 
      "dependencies": 
      
    
  

这似乎与指定依赖项的这种更详细的方式相似:


  "version": "1.0.0-*",

  ...

  "dependencies": 
    "System.Runtime": "4.0.21-beta-23516",
    "Newtonsoft.Json": "6.0.6",
    "Microsoft.CSharp": "4.0.1-beta-23516"
  ,
  "frameworks": 
    "dnx451": 
      "dependencies": 
        "System.Net.Http": "4.0.1-beta-23516"
      
    ,
    "dnxcore50": 
      "dependencies": 
        "System.Net.Http": "4.0.1-beta-23516"
      
    
  

两个版本都可以正常工作,因为我能够成功调试我的 HttpClient 调用。

您可以忽略除 System.Net.Http 之外的其他依赖项。

【讨论】:

以上是关于我应该如何为 dnx451 和 dnxcore50 引用 HttpClient?的主要内容,如果未能解决你的问题,请参考以下文章

dnxcore50可以引用针对.net4.5编译的nuget包吗

为啥默认的 mvc6 模板针对多个 DNX 版本?

dnx451 RC1 InMemorySymmetricSecurityKey 发生了啥?

asp.net dnxcore50 按文件路径加载程序集

我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?

应该如何为我的 serverinfo.js 为 discord.js 定义执行/运行