我正致力于创建REST API。
我把一些简单的东西放在一起使用WebApi。
然后我发现我无法从域外调用它,所以我查找了该怎么做并找到了this article on ASP.net。 WebApi中似乎没有config.EnableCors()
方法,但该文章是为WebApi2编写的,因此我卸载了所有软件包并将其替换为v2对应软件。
在进行任何CORS更改之前,我尝试过测试API。我一直收到404错误。调试显示我正在使用API,问题是调用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;
}
各种“GetVersion *”方法只返回true / false,具体取决于他们是否找到了相关数据并将tat数据放入out version
参数。
FWIW,我可以看到服务在启动时注册路由。
显然,我错过了一些东西,但到目前为止,我还没有找到任何可以解释它是什么的文档。
有人可以提出任何建议吗?
答案 0 :(得分:1)
检查“控制器”,如果你的控制器具有相同的名称,即使在不同的命名空间中,此方法也不会返回它们。