我遇到了一个问题,当引入第一个生产版本 Asp.NET WebApi 并且人们正在从候选版本升级到它时,许多其他人似乎都遇到了问题......
尽管我现在对情况有了更好的了解,并且认为我已经缩小了问题的范围,但我一直在尝试在网上找到的所有解决方案,但都没有运气。
具体来说,我的应用程序(将其部署到我的本地 IIS 服务器,或在开发服务器中运行)似乎正在使用旧的 System.Web.Http 程序集。
Application_Start() 方法的第二行失败并出现异常
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
**WebApiConfig.Register(GlobalConfiguration.Configuration);**
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
它从包含模板的 WebApiConfig.cs 文件/类中调用 Register 方法:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
其中调用 config.Routes.MapHttpRoute() 会导致以下异常:
Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.
Server stack trace:
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
Exception rethrown at [0]:
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Web.Http.GlobalConfiguration.get_Configuration()
at MvcApplication2.WebApiApplication.Application_Start()
in C:\Projects\TestArea\ASP_MVC\4\MvcApplication2\Global.asax.cs:line 21
到目前为止我所做的事情是:
- 重新安装所有版本的 .NET
- 从 GAC 中删除 System.Web.Http
- 确保项目引用指向 WebApi 目录,而不是操作系统的 .NET 程序集
- 确保项目引用设置为“复制本地”
- 从 c:\windows\system32\inetsrv\ 和 c:\inetpub 中删除了 IIS 的临时文件
- 跑 c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe
- 通过 NuGet 更新了所有 WebApi 相关的包
- 停止并启动 IIS 和站点
- 重新启动
ServiceResolver 方法在普通的 .NET System.Web.Http 中不存在,仅在 System.Web.Http 的 WebApi 版本中存在,这就是为什么我认为它引用了错误的程序集。
我只是不知道还能做什么。任何帮助深表感谢。谢谢你。