ASP.Net MVC如何解析控制器?

时间:2013-09-12 12:18:44

标签: asp.net-mvc-4

我正在尝试构建一个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. DetailsController,它继承自System.Web.Http.ApiController
  3. 我还在WebApiConfig中添加了一个简单的“用户路线”:

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

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

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

    这两个都返回404。

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

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

    在这个例子中,我故意设计了班级名称,以避免任何冲突,所以其他陷阱等待绊倒我?

    谢谢,

    Chris A

2 个答案:

答案 0 :(得分:0)

检查您的路线文件,Global.asax下的RegisterRoutesMapRoute调用应告诉您MVC路由需要知道的一切。请记住,路线的顺序很重要:顶部路线优先于底部。 Web API使用WebApiConfig类和MapHttpRoute调用来配置路由。

答案 1 :(得分:0)

请确保您已将(MVC)路线置于您希望控制的操作之上,默认操作为索引。

dt %>% ggplot(aes(x = factor(cyl), y = `0`, fill = factor(cyl))) + 
    geom_bar(stat = 'identity') +
    geom_point(aes(x = factor(cyl), y = `1`), colour = 'black') +
    geom_segment(aes(x = factor(cyl), xend = factor(cyl), y = `0`, yend = `1`))

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

要注册请执行以下操作:

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

AreaRegistration.RegisterAllAreas();