WebApi2 总是重定向第一个请求
WebApi2 always redirecting first request
我在 IIS 上托管了一个 ASP.NET WebApi2 项目。每个 GET 请求都被重定向到与原始请求相同的 位置 ,但重定向(正确地)剥离了身份验证 header,因此请求失败并返回 401。
这是怎么回事?为什么我的初始 GET 请求总是被重定向?
卷曲:
curl https://localhost/myapp/api/test
控制器:
public class TestController : ApiControllerBase
{
[HttpGet]
[ApiAuthorize]
[Route("api/test")]
public IHttpActionResult Get()
{
return Ok();
}
[HttpPost]
[ApiAuthorize]
[Route("api/test")]
public IHttpActionResult Post()
{
return Ok();
}
}
IIS 日志:
2020-07-31 14:48:32 127.0.0.1 GET /mysite/api/test - 443 - 127.0.0.1 PostmanRuntime/7.26.2 - 302 0 0 13
2020-07-31 14:48:32 127.0.0.1 GET /MySite/api/test - 443 - 127.0.0.1 PostmanRuntime/7.26.2 https://server/mysite/api/Test 401 0 0 458
原来重定向是IIS自己触发的。最初的请求是 https://localhost/myapp/api/test
,但我的应用程序在默认网站下注册为应用程序 MyApp
。
看起来重定向是 IIS 更正原始请求以考虑 myapp
的不同大小写:https://localhost//MySite/api/Test
不确定这是设计还是默认行为,但我花了 2 天的调试时间:-(
我在 IIS 上托管了一个 ASP.NET WebApi2 项目。每个 GET 请求都被重定向到与原始请求相同的 位置 ,但重定向(正确地)剥离了身份验证 header,因此请求失败并返回 401。
这是怎么回事?为什么我的初始 GET 请求总是被重定向?
卷曲:
curl https://localhost/myapp/api/test
控制器:
public class TestController : ApiControllerBase
{
[HttpGet]
[ApiAuthorize]
[Route("api/test")]
public IHttpActionResult Get()
{
return Ok();
}
[HttpPost]
[ApiAuthorize]
[Route("api/test")]
public IHttpActionResult Post()
{
return Ok();
}
}
IIS 日志:
2020-07-31 14:48:32 127.0.0.1 GET /mysite/api/test - 443 - 127.0.0.1 PostmanRuntime/7.26.2 - 302 0 0 13
2020-07-31 14:48:32 127.0.0.1 GET /MySite/api/test - 443 - 127.0.0.1 PostmanRuntime/7.26.2 https://server/mysite/api/Test 401 0 0 458
原来重定向是IIS自己触发的。最初的请求是 https://localhost/myapp/api/test
,但我的应用程序在默认网站下注册为应用程序 MyApp
。
看起来重定向是 IIS 更正原始请求以考虑 myapp
的不同大小写:https://localhost//MySite/api/Test
不确定这是设计还是默认行为,但我花了 2 天的调试时间:-(