Запутанный Url.Action Call in ASP. NET MVC - PullRequest
0 голосов
/ 05 марта 2020

TL; DR

Как Url.RouteUrl отображает одно из свойств объекта routeValues на свойство с другим именем в параметре объекта метода действия?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Я работаю над устаревшим ASP. NET MVC веб-сайтом на работе (написано на VB. NET ...) и пытаюсь понять, как конкретный звонок на Url.RouteUrl работает. Вот соответствующий код:

Вид

rel="<%:Url.RouteUrl("UserContributionsMediaGetPhotosForViewer", New With {.resourceType = "Review", .resourceIndex = 0, .authorId = Model.AuthorId, .reviewId = Model.Id })%>"

Определение маршрута

routes.MapRouteLowercase(
    "UserContributionsMediaGetPhotosForViewer",
    "UserContributionsMediaGetPhotosForViewer/{resourceType}/{resourceIndex}/{authorId}/{reviewId}",
    New With {.controller = "UserContributionsMedia", .action = "GetPhotosForViewer", .resourceIndex = "0"},
    Nothing,
    routingNamespace,
    RouteSection.PartDetail
)

Метод действия

Public Class UserContributionsMediaController
    <AcceptVerbs(HttpVerbs.Post)>
    Function GetPhotosForViewer(ByVal userContributionsMediaRequest As UserContributionsMediaRequest) As ActionResult
        'Do stuff and return an ActionResult
    End Function
End Class

Определение класса параметра действия

Public Class UserContributionsMediaRequest
    Public Property ResourceIndex As Short
    Public Property ReviewId As String
    Public Property ReviewerId As String
    Public Property ResourceType As String
End Class

Так как же MVC отображает authorId в вызове RouteUrl на ReviewerId свойство параметра объекта метода действия? Я думал, что все с маршрутизацией в основном основано на порядке параметров, но там нет порядка , если параметр метода действия является объектом, а не отдельными примитивными параметрами. Я должен упомянуть, что есть также ModelBinder для класса UserContributionsMediaRequest, но я не вижу, как привязка модели повлияет на RouteUrl.

Небольшое разъяснение будет высоко ценится!

...