Правила привязки параметров запроса в Razor Pages - PullRequest
0 голосов
/ 14 февраля 2020

В Razor Pages очень удобно, например, если бы вы вызвали

http://localhost/foo?bar=42

В соответствующей модели ключ bar автоматически доступен в конструкторе OnGet

public IActionResult OnGet(int bar)
{
    System.Console.WriteLine($"bar is {bar}");
}

Но что, если параметр запроса равен poo?

http://localhost/foo?poo=42

, тогда в модели bar не получится значение 42.

Итак достаточно просто, получить переменные, соответствующие ключу параметра запроса. Но что, если ключ дефисен?

http://localhost/foo?foo-bar=42

foo-bar определенно не является допустимым именем переменной. Как мне получить доступ к этому параметру запроса? Каковы правила здесь?

В моем конкретном случае c у меня действительно нет выбора, кроме как получить эти параметры строки запроса через дефис. Кроме того, я на .net core 2.2.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

I думаю, heiphens представлены подчеркиванием, поэтому foo-bar становится foo_bar, однако это идет вразрез со стандартным соглашением C#.

Я бы не рекомендовал связывать параметры запроса как параметры обработчика в любом случае. Самое чистое решение - определить свойство на вашем PageModel следующим образом:

// from the Microsoft.AspNetCore.Mvc namespace
[FromQuery(Name = "foo-bar")]
public string FooBar { get; set; }

Таким образом, каждый раз, когда указывается параметр запроса, соответствующий этому имени, он будет всегда быть связанным , Независимо от того, запрашивал ли его указанный обработчик c. Тогда вы можете просто получить доступ к свойству на PageModel, когда вам это нужно. Итак, ваш пример метода становится:

public void OnGet()
{
    System.Console.WriteLine($"bar is {FooBar}");
}
0 голосов
/ 15 февраля 2020

Самое простое решение в Razor Pages - использовать Request.Query:

public void OnGet()
{
    var data = Request.Query["foo-bar"];
}
...