2

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

System.ArgumentException:前导“?” 必须包含非空查询。(参数“值”)

该网站在 Azure 应用服务中运行。当我在本地调试并使用 HEAD 请求访问相同的 URL 时,它返回 405 Not Implemented,但没有异常。也许是因为本地使用 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)

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

4

1 回答 1

0

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

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

        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;
        }
    }
}
于 2020-07-10T03:05:34.223 回答