ASP.Net Core 2.1: передать urlencoded "id" через маршрутизацию? - PullRequest
0 голосов
/ 27 апреля 2019

Я использую Visual Studio 2019 и ASP.Net Core 2.1.У меня есть список <ul> на странице индекса, и у одного из элементов в списке (сгенерированном из базы данных) есть «/» в имени.Элемент списка генерируется как:

    <li>
        <a href="/Home/Index/OBJECT-WITH-A-%2F-IN-IT">OBJECT-WITH-A-/-IN-IT</a>
    </li>

Если я нажимаю на полученную ссылку, я получаю ошибку 404:

    No webpage was found for the web address:
    https://localhost:12345/Home/Index/OBJECT-WITH-A-%2F-IN-IT

Я предполагаю, что маршрутизация выполняет декодирование URLв какой-то момент, прежде чем я хочу это в этом случае.Есть ли способ передать это {id} как есть?

Редактировать

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

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Вы можете использовать звездочку (*) или двойную звездочку (**) в качестве префикса для параметра маршрута для привязки к остальной части URI.Они называются универсальными параметрами.

app.UseMvc(
    routes =>
    {
        routes.MapRoute(
            name: "defaults",
            template: "{controller=Home}/{action=Index}/{*id}");
    }
);

Вы можете сослаться Ссылка на шаблон маршрута

0 голосов
/ 27 апреля 2019

При следующей конфигурации ваш пример работает нормально

Startup.cs

/..
app.UseMvcWithDefaultRoute();
//or its equivalent
app.UseMvc(routes => {
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

HomeController.cs

public class HomeController {
    [HttpGet]
    public IActionResult Index(string id) {
        //...
    }
}

Значение id становится равным "OBJECT-WITH-A-%2F-IN-IT". В случае ссылки, сгенерированной следующим образом

<a href="/Home/Index/OBJECT-WITH-A-/-IN-IT">OBJECT-WITH-A-/-IN-IT</a>

действительно возвращается 404 Not Found.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...