C# GetControllerMapping在WebApi2中返回空集合
我正在创建一个RESTAPI 我把一些简单的东西放在一起使用WebApi 然后我发现我无法从我的域外调用它,所以我查找了该怎么做并找到了。C# GetControllerMapping在WebApi2中返回空集合,c#,asp.net-web-api,C#,Asp.net Web Api,我正在创建一个RESTAPI 我把一些简单的东西放在一起使用WebApi 然后我发现我无法从我的域外调用它,所以我查找了该怎么做并找到了。config.EnableCors()方法在WebApi中似乎不可用,但本文是为WebApi2编写的,因此我卸载了所有软件包,并将其替换为v2版本 在进行任何CORS更改之前,我尝试过测试API。我一直收到一个404错误。调试显示我正在使用API OK,问题是调用GetControllerMapping()。随着WebApi v1软件包的就位,这将返回5个控制
config.EnableCors()
方法在WebApi中似乎不可用,但本文是为WebApi2编写的,因此我卸载了所有软件包,并将其替换为v2版本
在进行任何CORS更改之前,我尝试过测试API。我一直收到一个404错误。调试显示我正在使用API OK,问题是调用GetControllerMapping()
。随着WebApi v1软件包的就位,这将返回5个控制器的集合。只使用v2版本替换它们之后,调用返回一个空集合
控制器节方法如下所示
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
var controllers = GetControllerMapping(); // <=== This is the line that returns an empty collection
var routeData = request.GetRouteData();
var controllerName = (string)routeData.Values["controller"];
HttpControllerDescriptor result = null;
if (!controllers.TryGetValue(controllerName, out result))
{
string version;
if (!GetVersionFromMediaType(request, out version))
{
if (!GetVersionFromAcceptHeaderVersion(request, out version))
{
if (!GetVersionFromHeader(request, out version))
{
if (!GetVersionFromQueryString(request, out version))
{
version = V_LATEST;
}
}
}
}
HttpControllerDescriptor versionedDescriptor;
var newName = string.Concat(controllerName, "V", version);
if (controllers.TryGetValue(newName, out versionedDescriptor))
{
result = versionedDescriptor;
}
}
return result;
}
公共覆盖HttpControllerDescriptor SelectController(HttpRequestMessage请求)
{
var controllers=GetControllerMapping();//检查您的“控制器”,如果您的控制器具有相同的名称,即使在不同的命名空间中,此方法也不会返回它们。很有趣。当控制器在v1中工作时,您是否使用自定义实现来选择控制器?在404响应的正文中,您是否看到类似这样的错误“没有与控制器名称匹配的类型。。。“。另外,您用于Web API2的Microsoft.AspNet.WebApi.Core
nuget软件包的版本是什么,因为文章似乎指向一个预发布的软件包。@Kiran,是的。我使用的是控制器选择方法,与我现在使用的方法相同。该方法的第一行是var controllers=GetControllerMapping()
执行后,控制器是一个空列表。API调用的确切输出是{“message”:“未找到与请求URI匹配的HTTP资源”http://localhost:8087/atlas/api/events/“.”,“messageDetail”:“未选择任何控制器来处理此请求。”}
Microsoft.AspNet.WebApi.Core的版本是5.0.0.0hanks…你能分享一下你的自定义控制器选择器的外观吗?这取决于你是如何实现的?如果你有建议,请添加它作为注释而不是答案。你可以尝试我的代码,但在生产阶段之前需要增强=>