路由问题...未找到资源 - MVC3

时间:2011-11-02 19:28:54

标签: vb.net json asp.net-mvc-3 rest routing

让自己开始使用MVC3

尝试在Global.asax

中定义简单路线
routes.MapRoute( _
  "MeGet", _
  "me", _
  New With {.controller = "MeController", .action = "Show"}, _
  New With {.httpMethod = New HttpMethodConstraint("GET")}
)

routes.MapRoute( _
  "MePut", _
  "me", _
  New With {.controller = "MeController", .action = "Update"}, _
  New With {.httpMethod = New HttpMethodConstraint("PUT")}
)

我的控制器如下。

Public Class MeController
  Inherits System.Web.Mvc.Controller

  '
  ' GET: /me
  Public Function Show() As ActionResult
    Dim stuff = {"Hello", "World"}

    Return Json(stuff, JsonRequestBehavior.AllowGet)
  End Function

  '
  ' PUT: /me
  Public Function Update() As ActionResult

    Return View()
  End Function

End Class

我得到的只是......

  

无法找到资源。

没有堆栈跟踪。

以下建议

将控制器更改为_me并尝试了路由调试器

现在它说 NO MATCH!但是在它下面说它与当前请求匹配......

enter image description here

3 个答案:

答案 0 :(得分:2)

您需要在控制器名称中加入_.controller = "_me"

答案 1 :(得分:0)

Public添加到您的操作方法中。

您还需要传递JsonRequestBehavior.AllowGet

答案 2 :(得分:0)

Public Class _me
    Inherits System.Web.Mvc.Controller

必须成为:

Public Class MeController
    Inherits System.Web.Mvc.Controller
ASP.NET MVC约定中的

指示控制器类名称后缀为Controller。我不知道你为什么在你的控制器名称之前放一个_,这是违反约定的,但是如果你决定保留它,你也必须在路由定义中反映这一点。

同样在您的路线中替换:

.controller = "MeController" 

使用:

.controller = "Me"

以便您的路线定义如下所示:

routes.MapRoute( _
  "MeGet", _
  "me", _
  New With {.controller = "Me", .action = "Show"}, _
  New With {.httpMethod = New HttpMethodConstraint("GET")}
)

routes.MapRoute( _
  "MePut", _
  "me", _
  New With {.controller = "Me", .action = "Update"}, _
  New With {.httpMethod = New HttpMethodConstraint("PUT")}
)