解释ASP.NET WebAPI HttpRoute管道

时间:2013-09-24 11:05:02

标签: asp.net asp.net-web-api asp.net-4.5 asp.net-web-api-routing

我是一个长期服务的ASP.NET VB Web表单程序员,但需要开始使用WebAPI来创建一个简单的服务。我已经关注了http://www.asp.net上的PluralSight教程,并有这两个片段:

HelloApiController.vb

Imports System.Web.Http

Namespace HelloWebApiDemo

    Public Class HelloApiController
        Inherits ApiController

        Public Function [Get]()
            Return "Hello from API at " & DateTime.Now.ToString
        End Function

    End Class

End Namespace

Global.asax.vb

Imports System.Web.Http
Imports System.Web.Http.Routing

Public Class Global_asax
    Inherits System.Web.HttpApplication

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        GlobalConfiguration.Configuration.Routes.Add("default", New HttpRoute("{controller}"))
    End Sub

End Class

运行时,检索信息的URL为:http://localhost:63678/helloapi

有人可以解释"{controller}"如何自动映射到上述网址的相关性吗?我在代码中的任何地方都没有看到helloapi这个词。如果我创建了继承ApiController的第二个类怎么办 - IIS如何区分我想要访问哪个?

此外,方法名称[Get]()是否会自动映射到相应的HTTP谓词?再次,如果我想给它一个不同的名字会发生什么?

感谢。

1 个答案:

答案 0 :(得分:2)

关于Web API的一个好处是它按惯例工作。 Web API能够通过使用URI路径的约定映射到类名前缀(省略Controller)将GET请求路由到HelloApiController。如果你有另一个控制器,比如FooController,那么http://server/foo的URI就是点击你的第二个控制器所需要的。

至于方法名称,它是HTTP动词。默认情况下,Get的方法名称和以Get开头的方法名称(如GetFoo)将映射到HTTP GET,依此类推。这可以改变。路由的概念非常强大,这里无法通过答案解释。我强烈推荐Mike Wasson在ASP.NET网站上开始使用。查看this以及其他内容。