2013-09-25 10 views
0

Учитывая следующий простой Web API (не является частью проекта MVC, просто пустой сайт ASP.NET), который я взял из учебника:MapHttpRoute против MapRoute для основного POST WebAPI

Public Class AwesomeController 
    Inherits ApiController 

    Public Function [Get]() As String 
     Return "Hello. The time is " & DateTime.Now.ToString 
    End Function 

    Public Function Post(<FromBody> yourName As String) As String 
     Return String.Format("Hi {0}, you posted here at {1}", yourName, DateTime.Now.ToString) 
    End Function 

End Class 

Я создание маршрута в global.asax так:

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

Это прекрасно работает, но я читал, что WebAPI маршрутизация предпочтительно должна быть создана с использованием MapHttpRoute так, что служба может существовать в изоляции. Это правда?

Если да, может ли кто-нибудь опубликовать код для замены моей версии global.asax?

Update

Я понял, последний немного, но все равно бы знать, есть ли «правильный» путь?

RouteTable.Routes.MapHttpRoute("default", "{controller}") 

ответ

2

MapHttpRoute метод расширение просто удобный способ регистрации HttpRoute экземпляров в вашей таблице маршрутизации. Все в порядке, чтобы вручную создать и зарегистрировать HttpRoute без использования сокращенного метода.

Если вы хотите понять внутреннюю работу MapHttpRoute, взгляните на исходный код: HttpRouteCollectionExtensions.cs.

+0

Спасибо за это. Будучи новичком в маршрутизации, я не вижу большого различия между этими двумя примерами. Вы говорите, что «MapHttpRoute» является сокращенным, но есть ли примеры, когда это действительно полезно по сравнению с оригинальным подходом? Была ли какая-либо другая причина, по которой «MapHttpRoute» был разработан только для экономии времени? – EvilDr

+1

@EvilDr «MapHttpRoute» упрощает определение дополнительных параметров, таких как значения и ограничения маршрута по умолчанию, используя динамические типы (вместо 'HttpRouteValueDictionary' и т. Д.). Вам нужно будет использовать экземпляры «HttpRoute», если вы хотите указать настраиваемый специфический для маршрута «HttpMessageHandler» (см. Http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Routing/HttpRoute. CS). –

+0

Хорошо, спасибо, спасибо – EvilDr

Смежные вопросы