2

我是一名长期服务于 ASP.NET VB 网络表单的程序员,但需要开始使用 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

全球.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}"自动映射到上述 URL 的相关性?helloapi我在代码中的任何地方都没有看到这个词。如果我创建了第二个继承的类怎么办ApiController怎么办 - IIS 将如何区分我想要访问的类?

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

谢谢。

4

1 回答 1

2

Web API 的一大优点是它按约定工作。Web API 能够HelloApiController通过使用映射到类名前缀的 URI 路径约定(省略 Controller)来路由 GET 请求。如果您有另一个控制器,例如FooController,则 URIhttp://server/foo是访问您的第二个控制器所需要的。

至于方法名称,它使用 HTTP 动词。默认情况下,方法名和以asGet开头的方法名映射到 HTTP GET 等。这可以改变。路由的概念很强大,这里无法通过一个答案来解释。我强烈推荐 Mike Wasson 在 ASP.NET 网站上的入门资料。看看这个和其他的东西。GetGetFoo

于 2013-09-24T11:58:57.997 回答