Почему ASP. NET базовая маршрутизация приводит к исключениям для запросов HEAD на Azure? - PullRequest
1 голос
/ 09 июля 2020

Я вижу много одинаковых исключений в Application Insights для запросов HEAD для многих путей на моем веб-сайте:

System.ArgumentException: ведущий знак '?' должен быть включен для непустого запроса. (Параметр 'значение')

Веб-сайт работает в Azure службе приложений. Когда я отлаживаю локально и нажимаю те же URL-адреса с запросом HEAD, он возвращает 405 Not Implemented, но без исключений. Возможно, потому что local использует Kestrel, а Azure использует IIS?

Я указываю маршруты следующим образом:

endpoints.MapControllerRoute(
    name: "home-test",
    pattern: "home/test",
    defaults: new { controller = "Home", action = "Test" });

endpoints.MapControllerRoute(
    name: "home-test-id",
    pattern: "home/test/{id}",
    defaults: new { controller = "Home", action = "Test" });

И действие моего контроллера выглядит так:

[HttpGet]
public async Task<IActionResult> Test(string id)

Как лучше всего разрешить эти исключения?

1 Ответ

0 голосов
/ 10 июля 2020

Правила маршрутизации выполняются последовательно сверху вниз. После моего тестирования я считаю, что ваша часть маршрута по умолчанию не должна изменяться.

Код был изменен так, чтобы он работал нормально.

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");


            endpoints.MapControllerRoute(
                name: "home-test-id",
                pattern: "home/test/{id}",
                defaults: new { controller = "Home", action = "Index" });
        });

Вдобавок , Я предлагаю вам использовать пользовательские правила маршрутизации .

namespace webapi.Controllers
{
    [Route("Home1")]
    public class MyController:Controller
    {
        [Route("test/{id}")]
        public string Get(int id)
        {
            return "id: " + id;
        }
    }
}
...