MVC路由 - 混合Api和视图类型控制器

时间:2012-11-15 11:52:02

标签: asp.net-mvc routes asp.net-web-api

我有一个WebAPI项目,它也使用MCV.Explorer库提供文档页面,我无法理解如何向该控制器添加路由。

Api控制器按此路线正常工作:

routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }
);

我在API应用程序的“Docs”目录中有一个docs控制器,如下所示:

[System.Web.Http.AllowAnonymous]
public class DocsController : Controller
{
  [System.Web.Mvc.HttpGet]
  public ActionResult Index()
  {
    var apiExplorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
    return View(apiExplorer);
  }
}

我正试图通过以下方式前往:

routes.MapRoute(
  name: "Docs",
  url: "Docs/",
  defaults: new { controller = "Docs", action = "Index" }
);

该网站只是抱怨未启用目录浏览的错误。我猜测由于控制器类不在Controllers目录中而发生了一些事情,但我不确定在那方面。

我还在Home ApiController上使用一种简单的方法(索引),此方法现在返回一些链接。你将如何设置一个路由来处理ApiController的home \ index路由?

[System.Web.Http.AllowAnonymous]
public class HomeController : ApiController
{
  [HttpGet]
  public Link[] Index()
  {
    return new Link[] 
    { 
      new SelfLink(Request.RequestUri.AbsoluteUri, "mood-api-root"),
      new Link("auth", @"Account/Login/", "authenticate")
    };
  }
}

任何指针都会很棒,谢谢。

2 个答案:

答案 0 :(得分:0)

我看不出为什么你的/Docs路线无法正常工作,但可能没有正确注册。查看configuration codedocumentation of this Web API sample web site。这个网站集成了ASP.NET MVC和Web API功能集成到一个项目中。它使用ASP.NET MVC区域,但即使您不使用区域,路由代码也应相似。

答案 1 :(得分:0)

我最终走上了使用NuGet包切换到使用AttributeRouting的路线(没有双关语):

Install-Package AttributeRouting.Webapi

切换到此,我没有回头。非常好的路由解决方案。