TL; TD我已经创建了一个新的WebApi2应用程序并删除了所有默认的MVC guff,所以只留下了WebApi guff。为什么它不起作用。
我创建了一个Web Api 2项目,并且不需要任何非Web Api功能,因此我在创建WebApi路由和控制器之前将其删除。无论我如何尝试访问它,我都无法点击我的新web api控制器操作。下面的代码段;
Global.asax中
public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
}
}
WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}"
);
}
}
TestController.cs
public class TestController : ApiController
{
public IEnumerable<TestItem> Get()
{
var updates = new List<TestItem>()
{
new TestItem()
{
Title = "Testing Testing",
Content = "Testing Content",
Date = DateTime.Now
}
};
return updates;
}
}
项目结构
我完全不知所措,我确定我错过了一些明显的东西。
答案 0 :(得分:2)
您的路线定义如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}"
);
这是期待3段的路线;即http://localhost/Test/Get/1
。但是,您没有任何匹配此操作的操作。您唯一的操作是匹配http://localhost/Test/Get/
。
您可以通过向您的Http路线添加defaults: new { id = RouteParameter.Optional }
来更正此问题。不过,我强烈建议您考虑转而使用Attribute based Routing。使用属性路由,您可以使用控制器中的属性来管理路由,而不是使用魔术字符串路由表。例如:
[RoutePrefix("Test")]
public class TestController : ApiController {
// http://localhost/Test/Get
[Route("Get")]
public IEnumerable<TestItem> Get() { ...
}
//http://localhost/Test/Get/1
[Route("Get/{id}")
public TestItem Get(int id) { ...
}
}
答案 1 :(得分:1)
无法从提供的代码中看到导致WebApi失败的原因,但这将为您提供最少设置的WebApi。
旁注,FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
适用于MVC过滤器,WebApi不使用。您应该在config.Filters.Add(new SomeFilter())
文件中使用WebApiConfig.cs
。
向http://localhost:80/api/test
(或其正在运行的任何端口)发出 GET 请求,它将返回XML或JSON中的TestItem列表,具体取决于您的客户端http标头。< / p>
<强>的Global.asax.cs 强>
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
<强> WebApiConfig.cs 强>
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
<强> TestController.cs 强>
public class TestController : ApiController
{
public IEnumerable<TestItem> Get()
{
var updates = new List<TestItem>()
{
new TestItem()
{
Title = "Testing Testing",
Content = "Testing Content",
Date = DateTime.Now
}
};
return updates;
}
}
<强> TestItem.cs 强>
public class TestItem
{
public TestItem()
{
}
public string Content { get; set; }
public DateTime Date { get; set; }
public string Title { get; set; }
}
我安装了以下nuget软件包:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
</packages>