Я перестраиваю интерфейс приложения и из-за его сложности должен работать над существующим бизнес-слоем. В результате у нас есть вещи, называемые «Новости» и «Документы», но на самом деле оба являются «Документами», где они хранятся.Результат Url.Action не разрешается с использованием атрибута Route
Я сделал DocumentController, который обрабатывает все как можно точнее, хлопая [Route("News/{action=index}")]
и [Route("Documents/{action=index}")]
на контроллере, чтобы я мог обращаться к контроллеру как к Новостям, так и к Документам. Все идет нормально. Просмотр конкретного документа с использованием одного ActionResult
с атрибутами [Route("Documents/View/{id}"]
и [Route("News/View/{id}"]
также отлично работает. Однако я столкнулся с проблемой, когда пытаюсь использовать что-либо кроме id
в качестве параметра, но только для части новостей.
Мой ActionResult
метод имеет следующее определение
[Route("Documents/Download/{documentGuid}/{attachmentGuid}")]
[Route("News/Download/{documentGuid}/{attachmentGuid}")]
public ActionResult Download(Guid documentGuid, Guid attachmentGuid)
...
И мой взгляд, имеет следующий, чтобы получить ссылку
<a href="@Url.Action("Download", "Documents", new { documentGuid = Model.Id, attachmentGuid = attachment.AttachmentId })">Download</a>
Это сгенерирует ссылку сродни site/Documents/Download/guid/guid
прекрасно, когда у меня есть «Документы» как контроллер, но если я поставлю «Новости», я получаю созданный URL-адрес, который использует querystring, сходный с параметрами site/News/Download?guid&guid
, и разрешается на 404. Если я вручную удалю маркеры с запросами и отформатирую URL-адрес manu союзник это решит хорошо.
Что здесь происходит, что-то противоречивое, что мне не хватает?
Спасибо за подробный ответ, это был именно этот вопрос и рабочее решение:) – Perry