所以,这很简单。我过去做过这个。但是,似乎我错过了一些东西。
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
SomeController.cs
[RoutePrefix("api")]
public class SomeController: ApiController
{
[Route("some")]
[HttpGet]
private HttpResponseMessage GetSome(HttpRequestMessage request)
{
...
}
}
现在,当我致电:http://localhost:54699/api/some
时,我收到以下404
:
{“Message”:“找不到与请求匹配的HTTP资源 URI'http://localhost:54699/api/some'。“,”MessageDetail“:”不 找到的类型匹配名为'some'的控制器。“}
文件夹结构:
答案 0 :(得分:4)
为什么你的控制器方法是私有的,这应该是公开的
[RoutePrefix("api")]
public class SomeController: ApiController
{
[Route("some")]
[HttpGet]
public HttpResponseMessage GetSome(HttpRequestMessage request)
{
...
}
}
答案 1 :(得分:0)
尝试在MVC' GlobalConfiguration.Configure(WebApiConfig.Register);
之后移动FilterConfig
。这是WebAPI属性路由的标准警告。
答案 2 :(得分:0)
你的路由配置文件中有/ api。
你已经提到/ api作为控制器的路由前缀,然后动作是“some”。
uri到“some”应该是
http://localhost:<port>/api/api/some
答案 3 :(得分:0)
[RoutePrefix("api/some")]
public class SomeController: ApiController
{
[HttpGet]
public HttpResponseMessage GetSome(HttpRequestMessage request)
{
...
}
}
你的方法GetSome是私有的。另外,我将修改RoutePrefix属性,如代码片段中所示,以避免在每个方法上重写Route属性。