我的解决方案中有一个MVC项目,其中也有ApiControllers。我已经在IIS中设置了项目并将其添加到主机文件中。
路线如下所示:
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
我在文件夹 Project.Web/Controllers 中添加了一个名为 TestController 的控制器,它有一个方法,它只是返回如下字符串:
public class TestController : ApiController
{
public string Get()
{
return "Test";
}
}
如果我尝试通过mysite.local/api/test/get访问我的网站,我会收到以下错误:
{
"Message": "No HTTP resource was found that matches the request URI 'http://mysite.local/api/test/get'.",
"MessageDetail": "No type was found that matches the controller named 'test'."
}
但是如果我从Visual Studio 17启动网站,我能够毫无错误地访问localhost:portnr/api/test/get。
我试图添加[Route()]
和[RoutePrefix()]
,但没有任何成功我也试图将Apicontroller移动到Project.Web/Controllers/Api中,但没有任何成功。
有谁知道为什么我可以通过本地主机访问它,而不是通过域名?
问候大卫
当您有一个名为 Get
的 Action 方法时,不需要传递名称。
您需要将路由配置中的更改恢复为默认配置。如果您希望使用自定义路由,请使用Route
注释。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
API 默认会理解,如果你去 URL "http://sampleweb.com/api/test
",这将调用你的 Get
方法。