Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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# WebApi硬编码控制器路由_C#_Asp.net Web Api_Routes_Self Host Webapi - Fatal编程技术网

C# WebApi硬编码控制器路由

C# WebApi硬编码控制器路由,c#,asp.net-web-api,routes,self-host-webapi,C#,Asp.net Web Api,Routes,Self Host Webapi,我正在尝试编写一个自托管WebAPI服务器。我希望所有路线都指向一个控制器。此控制器可以选择url的控制器部分,并使用它来决定适当的响应 我有以下路由配置: _configuration.Routes.MapHttpRoute ( name: "DefaultApi", routeTemplate: string.Concat("api/Home", "/{id}"), defaults: new { id = RouteParameter.Optional, contr

我正在尝试编写一个自托管WebAPI服务器。我希望所有路线都指向一个控制器。此控制器可以选择url的控制器部分,并使用它来决定适当的响应

我有以下路由配置:

_configuration.Routes.MapHttpRoute
(
    name: "DefaultApi",
    routeTemplate: string.Concat("api/Home", "/{id}"),
    defaults: new { id = RouteParameter.Optional, controllerName="Home" }
);
我的控制器类称为“HomeController”。我正在尝试将所有URL重定向到它

这是HomeController的代码。现在我已经注释掉了对外部逻辑(远程控制器)的调用。它应该只是在Get操作上返回一个字符串

public class HomeController : ApiController
{
    private IExternalController<string> remoteController;

    public HomeController()
    {
        remoteController = GlobalKernelConfiguration.GetStandardKernel().Get<IExternalController<string>>();
    }

    public string Get()
    {
        return "HELLO FROM INTERNAL"; //remoteController.Get();
    }

    public string Get(int id)
    {
        return remoteController.Get(id);
    }

    public void Delete(int id)
    {
         remoteController.Delete(id);
    }

    public void Post(string value)
    {
        remoteController.Post(value);
    }

    public void Put(int id, string value)
    {
        remoteController.Put(id, value);
    }
}
公共类HomeController:ApicController
{
专用IExternalController远程控制器;
公共家庭控制器()
{
remoteController=GlobalKernelConfiguration.GetStandardKernel().Get();
}
公共字符串Get()
{
返回“HELLO FROM INTERNAL”;//remoteController.Get();
}
公共字符串Get(int-id)
{
返回remoteController.Get(id);
}
公共无效删除(int-id)
{
remoteController.Delete(id);
}
公共作废帖子(字符串值)
{
remoteController.Post(值);
}
公共void Put(int-id,字符串值)
{
remoteController.Put(id,值);
}
}
我希望路由到主控制器,但在尝试以下url时出现以下错误:

{“Message”:“未找到与请求URI匹配的HTTP资源” lhost:9000/api/Home.,“MessageDetail”:“未找到提供控制器名称的路由。”
发现与请求URI“”}

匹配,正如@CodeCaster在注释中所建议的,问题是由于在路由选项中未使用正确的参数造成的

这是我以前吃过的

\u configuration.Routes.MapHttpRoute
(
名称:“DefaultApi”,
routeTemplate:string.Concat(“api/Home”,“/{id}”),
默认值:new{id=RouteParameter.Optional,controllerName=“Home”}
);

这就是我现在拥有的:

        public static void AddControllerRoute(string controllerName)
    {
        _configuration.Routes.MapHttpRoute
           (
               name: "DefaultApi",
               routeTemplate: string.Concat("api/Home", "/{id}"),
               defaults: new { id = RouteParameter.Optional, controller ="Home" }
           );
    }

请注意,默认参数已更改,现在使用“controller”而不是“controllerName”。这解决了问题,现在可以正常工作。

那么,这有什么用?CodeCaster我从控制台应用程序打印标题信息,发现了一个错误。我已经把它附在问题后面了。你的
家庭控制器
ApiController
?@CodeCaster-是的。我已将代码添加到问题的主控制器中。为什么在默认设置中使用
controllerName
而不使用
controller