16

Я обновил свой проект от webapi до webapi2 и теперь использует маршрутизацию атрибутов. У меня был метод, где я использовал помощник Url для получения URL-адреса. Это лучший способ заменить помощник Url (потому что это не работает для атрибутов).Замена для Url.Link при использовании маршрутизации атрибутов

Мой пример кода старого использования:

protected Uri GetLocationUri(object route, string routeName = WebApiConfig.RouteDefaultApi) 
{ 
    string uri = Url.Link(routeName, route); 
    return new Uri(uri); 
} 

Config маршрутов:

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: RouteDefaultApi, 
     routeTemplate: "{controller}/{id}/{action}", 
     defaults: new { id = RouteParameter.Optional, action = "Default" } 
    );   
} 

Использование:

Uri myUrl = GetLocationUri(route: new { action = "images", id = eventId }); 
+0

переферия (оставить кого-то еще решил что дубликат): http://stackoverflow.com/q/20234060/2181514 –

ответ

34

Почему вы пытаетесь использовать обычный маршрут RouteDefaultApi, когда вам хотите создать ссылки на атрибут маршрута контроллера/действия?

Ниже приведен пример использования, как вам нужно использовать Url.Link с маршрутизацией атрибута:

[Route("api/values/{id}", Name = "GetValueById")] 
public string GetSingle(int id) 

Url.Link("GetValueById", new { id = 10 }); 
+0

Отлично, это было решение, в котором я нуждался. Благодаря! – ainteger

+0

Превосходно! Я использовал константу класса - 'private const string GET_VALUE_BY_ID =" GetValueById ";' - и подключил это к атрибуту и ​​аргументу, чтобы они оставались связанными, если в какой-то момент некоторые решают переименовать его =) – Nebula

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