1

我正在尝试构建一个 asp.net mvc 4 应用程序。

我希望应用程序包含 HTML 站点和 restful api,例如

www.mysite.com/MyDetails/ www.mysiste.com/api/users/{userid}/Details/

在上面的示例中,我将使用 2 个控制器类。

  1. MyDetailsController 继承自 System.Web.Mvc.Controller
  2. 继承自 System.Web.Http.ApiController 的 DetailsController

我还在 WebApiConfig 中添加了一个简单的“用户路由”:

routeTemplate: "api/users/{userid}/{controller}/{id}

在我的早期测试中,似乎以下情况无效:

www.mysite.com/api/users/12345/MyDetails/ www.mysite.com/Details/

两者都返回 404。

这绝对是一件好事,但我想知道的是为什么它不起作用?我可以依靠它不起作用还是在我的简单测试中只是巧合?

我读过有人在努力开发一个包含 HTML 和 REST api 的单一 MVC 应用程序/项目,但最常见的抱怨似乎是你不能重复控制器名称,而且你似乎仍然不能简单地使用命名空间来区分它们。

在这个例子中,我特意设计了类名来避免任何冲突,那么还有什么其他的陷阱在等着我呢?

谢谢,

克里斯

4

2 回答 2

0

检查您的路线文件,应该Global.asaxRegisterRoutes. 该MapRoute调用应该会告诉您 MVC 路由需要了解的所有信息。请记住,路线的顺序很重要:顶部路线优先于底部路线。Web API 使用WebApiConfig类和MapHttpRoute调用来配置路由。

于 2013-09-12T13:31:49.847 回答
0

请确保您已将(MVC)路由放在您希望在控制器上执行的操作之上,默认操作为 index.html。

    [System.Web.Mvc.Route("Help")]
    public ActionResult Index()
    {
        ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
        return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
    }

上面的代码将通过以下方式点击此操作方法(前提是您的控制器已注册并从 apiController 或 Controller 派生):IISExpress 中的 http://localhost:54541/help

要注册,请执行以下操作:

在“global.asax.cs”中,您需要添加:

AreaRegistration.RegisterAllAreas();

于 2016-10-18T15:58:29.163 回答