Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetControllerMapping在WebApi2中返回空集合_C#_Asp.net Web Api - Fatal编程技术网

C# GetControllerMapping在WebApi2中返回空集合

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个控制

我正在创建一个RESTAPI

我把一些简单的东西放在一起使用WebApi

然后我发现我无法从我的域外调用它,所以我查找了该怎么做并找到了。
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…你能分享一下你的自定义控制器选择器的外观吗?这取决于你是如何实现的?如果你有建议,请添加它作为注释而不是答案。你可以尝试我的代码,但在生产阶段之前需要增强=>