Получить Uri внутри действия в asp.net MVC - PullRequest
0 голосов
/ 10 февраля 2012

Вот метод контроллера

public class FeedController : ControllerBase
    {

        public RssActionResult Rss()
        {
          //........

            List<SyndicationItem> items = new List<SyndicationItem>();
            var photosList = Facade.Photos.Get()
                .Select(x =>
                    new SyndicationItem(
                        x.Title, 
                        x.PreviewPath,
                        new Uri("http://site.com/"+CurrentLocale.CultureName+"/photos/show/" + x.ID + ".html"), x.ID.ToString(),
                        DateTime.UtcNow)
                        );
            //........
            return new RssActionResult() { Feed = feed };
        }

    }

Как мне избежать жесткого кодирования Uri?

UPDATE

 routes.MapRouteLowercase(
                "Photos_Route",
                "{culture}/photos/{action}/{id}.html",
                new { controller = "photos", action = "show", culture = defaultCulture }
                );

1 Ответ

1 голос
/ 10 февраля 2012

Если URI является ресурсом на вашем собственном сайте, и если для него определен маршрут, вы можете использовать что-то похожее на это:

Url.RouteUrl(new RouteValueDictionary{ {"controller","Photo"}, {"action","show"}, {"Id",x.ID} })

Существует несколько переопределений для метода RouteUrl.

В противном случае, если этот URI является ресурсом на каком-либо другом сайте, вы можете просто сохранить формат URI в web.config и использовать string.Format (urlFormatFromWebConfig, x.ID) для генерации URL.

РЕДАКТИРОВАТЬ: более конкретно, теперь, когда вы обновили свой маршрут:

new Uri(Url.RouteUrl("Photos_Route", new RouteValueDictionary{ {"culture", CurrentLocale.CultureName}, {"ID", x.ID.ToString()} }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...