为什么 ASP.NET 核心路由导致 Azure 上的 HEAD 请求异常?

Why does ASP.NET Core routing result in exceptions for HEAD requests on Azure?

我在 Application Insights 中看到很多相同的异常,因为 HEAD 请求对我网站上的许多路径:

System.ArgumentException: The leading '?' must be included for a non-empty query. (Parameter 'value')

该网站是 Azure 应用服务中的 运行。当我在本地调试并使用 HEAD 请求命中那些相同的 URL 时,它 returns 405 未实现,但没有例外。可能是因为本地使用的是 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)

解决这些异常的最佳方法是什么?

路由规则从上到下依次执行。经过我的测试,我认为你的默认路由部分不应该被修改。

代码已修改,因此它应该 运行 正常。

        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" });
        });

此外,我建议你使用custom routing rules

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