我知道有另一个关于WebapiConfig.cs和RouteConfig.cs的帖子,但我可以保证这是一个不同的问题。
当我发现我必须创建一个web服务(在同一个域中)时,我的MVC项目非常发达,我将授予对我的一个模型(包括JSON和XML)的访问权。
为了做到这一点,我右键单击控制器并选择“使用操作添加Web API 2控制器,使用实体框架”并选择我的模型类和数据库上下文。
模板非常完整,我认为我已准备好进行以下测试:
namespace MVC4GMAPS.Controllers
{
public class RestController : ApiController
{
private LocationDBContext db = new LocationDBContext();
// GET api/Rest
public IQueryable<Location> GetLocations()
{
return db.Locations;
}
etc...
不幸的是,当我尝试访问https://localhost:44300/api/Rest
时,我得到了404.但是,localhost:44300/Home/Index
仍然有效。
我认为问题依赖于我的RouteConfig.cs,因为它期待{action}而我的RestController没有任何动作:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
etc...
我该怎么办?我可以同时创建WebapiConfig.cs文件吗?我不相信。我希望你能帮助我!
答案 0 :(得分:4)
你还有WebApiConfig.cs
吗?在一个项目中,从一开始就是#AP; Web API&#34;我有这个:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
这与其他配置一样,是从Global.asax.cs
:
GlobalConfiguration.Configure(WebApiConfig.Register);
那应该让路由指向API控制器。否则,正如您所说,默认情况下从MVC定义的路由将在名为Rest
的控制器上查找名为api
的操作,该操作不存在。