Ted*_*erg 58 asp.net-mvc asp.net-mvc-4 asp.net-web-api
我正在尝试使用API控制器在ASP.NET MVC 4 Web应用程序内部工作.但是,每个请求都会导致404,我很难过.:/
我从项目模板定义的标准API控制器路由如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
在Global.asax中调用注册:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
// Register API routes
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
我有一个这样的基本API控制器:
namespace Website.Controllers
{
public class FavoritesController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new [] { "first", "second" };
}
// PUT api/<controller>/5
public void Put(int id)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我浏览到localhost:59900/api/Favorites时,我希望调用Get方法,而是获得404状态代码和以下响应:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:59900/api/Favorites'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'Favorites'.
</MessageDetail>
</Error>
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助,我在这里失去了一点思绪.:) 谢谢!
Eri*_*ard 124
我碰到的一件事是我的配置在我的GLobal.asax文件中以错误的顺序注册,例如:
正确的顺序:
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)
顺序错误:
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);
Run Code Online (Sandbox Code Playgroud)
只是说,这是我的问题,改变顺序是显而易见的,但有时被忽视,可能会引起很多挫折.
Zen*_*gix 13
基本上是同样的问题,在我的情况下通过添加:
<modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)
到了
<system.webServer>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
web.config的一节
小智 11
我一直在研究类似的问题,我花了很长时间才发现问题.这不是这个特定帖子的解决方案,但希望添加这个可以节省一些时间试图找到问题,当他们搜索为什么他们可能会为他们的控制器获得404错误.
基本上,我在课程名称的末尾拼错了"Controller".就那么简单!
小智 10
添加以下行
GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)
Application_Start()
在Global.ascx.cs文件中的函数.
我遇到了同样的问题,然后我发现我在其他项目中有重复的 api 控制器类名称,尽管“routePrefix”和命名空间以及项目名称不同,但它们仍然返回 404,我更改了类名称和它工作。
一个令人尴尬的简单解决方案的类似问题 - 确保您的 API 方法是public
. 离开任何方法访问修饰符也将返回 HTTP 404。
将返回 404:
List<CustomerInvitation> GetInvitations(){
Run Code Online (Sandbox Code Playgroud)
将按预期执行:
public List<CustomerInvitation> GetInvitations(){
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
110097 次 |
最近记录: |