WebApi.Models.VersionHttpControllerSelector”的方法“SelectController”没有实现。

背景交代:

   WebApi为了实现根据不同的版本,跳转不同的接口地址 ,重写了IHttpControllerSelector

重写的类 类似于  https://www.cnblogs.com/tx720/p/7666356.html

里面有一个SelectController方法,之前一直没报错

/// <summary>
/// 对应于自定义控制选择器的命名空间,
/// 将从HTTP请求消息中获取命名空间和控制器
/// 然后在字典中查找匹配的控制器
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
}

 

今天更新接口的时候,本地未跑起来测试,而是编译通过后直接替换文件到服务器测试接口,结果一运行提示某dll找不到。

按照以往的经验,我只是简单的在webconfig将

System.Net.Http,从默认高版本,改为了提示错误的4.0.0.0

又把System.Runtime,从默认高版本,改为了提示错误的 4.0.0.0

改完后本地运行正常, 发布到服务器测试环境就提示   WebApi.Models.VersionHttpControllerSelector”的方法“SelectController”没有实现。

而这个方法就没有更改过。然后就怀疑是否是引进了计划任务类导致冲突,本来准备去掉更新的任务计划相关代码后测试。

后来就想试试看本地System.Net.Http和System.Runtime的实际版本

结果一看发现本地版本都高于4.0.0.0   

修改webconfig为本地版本后,本地正常,更新到服务器测试版本  运行正常,问题解决。

<dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
      </dependentAssembly>

 

后记:更新服务器接口时切记备份原来的文件,以防替换文件导致接口挂掉!!!(即使在本地正常, 也不能保证在服务器就一定正常)

  

posted @ 2021-05-24 14:45  狼窝窝  阅读(140)  评论(0编辑  收藏  举报