2017-02-14 9 views
0

У меня очень простой вопрос о настройках маршрутов в Web Api.Задача настройки маршрута с дополнительным параметром

Моя цель - объединить два метода в один.

[HttpGet] 
[Route("foo/bar")] 
public HttpResponseMessage TestMethod() 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 



[HttpGet] 
[Route("foo/bar/{element}")] 
public HttpResponseMessage AnotherTestMethod(string element) 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

Код, наклеенный выше работает.

Конечно, я прочитал несколько руководств по настройке маршрутов, однако мне это не удалось. Строковый элемент является необязательным.

Это то, что я пытался в RouteConfig:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "MyController", action = "DefaultTestMethod", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "PropertyDefinitions", 
      url: "foo/bar/{element}", 
      defaults: new { controller = "MyController", action = "TestMethod", element = UrlParameter.Optional} 
     );   
    } 
} 

Спасибо за любую подсказку или помощь.

ответ

1

Вы можете присвоить значение по умолчанию для element. И в параметре route объявите переменную как NULL. Это обрабатывает параметр как необязательный.

[Route("foo/bar/{element?}")] 
public HttpResponseMessage TestMethod(string element = null) 
+0

Спасибо! Это было так просто :-). – Mozartos

0

Почему вы не используете только один способ, как указано ниже.

[HttpGet] 
[Route("foo/bar/{string element}")] 
public HttpResponseMessage TestMethod(string element) 
{ 
//TODO: Implement 
return new HttpResponseMessage(HttpStatusCode.OK); 
} 

Как известно, независимо от параметра элемента установлен или не установлен, то TestMethod() будет вызван.

+0

Благодарим вас за помощь. Однако это не работает :-(Или, может быть, я не вижу вашей точки зрения. – Mozartos