无法访问以其他方式可访问的网站 API,在 URL 中带有点
Cannot reach an otherwise reachable web API, with dots in URL
我在 IIS 8.5 (Windows Server 2012 R2) 上部署了一个 Web 服务,必须通过四个参数调用它。它们不是可选的,将直接包含在 URL 中,无需查询字符串,例如:
.. api/myservice/argument1/argument2/argument3/argument4
如果我尝试用上面写的 URL 调用它,它会回答并给出预期的响应。但是,当尝试使用真正的类似生产的参数时,会出现 404 - Not Found 错误:
api/myservice/AAAA_AAAAA.AAA_AAA_AA_AA_AAA_000000_000000_000000/333/AAA/AAA.AAA.AA.AA.AAA.000000.000000.000000
我认为是多个点引发了问题,所以我将每个点都替换为 %2E,但没有任何改变。
我搜索了已回答的问题:我尝试了 this and this,但无济于事。
这种类似生产的问题是什么 URL?
这是 API:
的代码
[RoutePrefix("api/myservice")]
public class MyServiceController : ApiController
{
[HttpGet]
[Route("{argument1}/{argument2}/{argument3}/{argument4}")]
public string StartValidation(string argument1, string argument2, string argument3, string argument4)
{
// operations...
}
}
我按照答案中的建议使用 IIS 失败请求跟踪来跟踪请求,但我无法在生成的日志中找到线索:
谁能帮帮我?
在 IIS 上启用失败的请求跟踪以进行检查。
很有可能 IIS 拒绝这些作为 URLScan 的一部分(如果启用),但 FRT 会确认。
首先尝试将其部署到您本地的IIS,如果成功,则意味着您的产品可以在IIS级别具有不同的配置,或者编译后的代码与您拥有的代码不一样需要重新部署 api。
如果 api 在您的本地 IIS 级别失败并且它从 vs 正常运行(如果您向邮递员传递任何参数)您遇到了后端断点,那么您的本地部署配置错误IIS。
如果您从未遇到断点,那么您的代码级别就会出错。
希望这有帮助
我终于解决了这个问题。我添加了一段代码,由 this answer to a quite identical question, to the web.config, but a different issue arose: it seemed IIS had to be run in "Integrated Mode". Thanks to the clue given by this answer 提供给一个关于此后续问题的问题,我切换了 部署了 API 的应用程序池的托管管道模式 从 Classic 到 Integrated,这使得该代码可以工作。网络 API 终于接受带句点的参数。
我在 IIS 8.5 (Windows Server 2012 R2) 上部署了一个 Web 服务,必须通过四个参数调用它。它们不是可选的,将直接包含在 URL 中,无需查询字符串,例如:
.. api/myservice/argument1/argument2/argument3/argument4
如果我尝试用上面写的 URL 调用它,它会回答并给出预期的响应。但是,当尝试使用真正的类似生产的参数时,会出现 404 - Not Found 错误:
api/myservice/AAAA_AAAAA.AAA_AAA_AA_AA_AAA_000000_000000_000000/333/AAA/AAA.AAA.AA.AA.AAA.000000.000000.000000
我认为是多个点引发了问题,所以我将每个点都替换为 %2E,但没有任何改变。 我搜索了已回答的问题:我尝试了 this and this,但无济于事。
这种类似生产的问题是什么 URL? 这是 API:
的代码[RoutePrefix("api/myservice")]
public class MyServiceController : ApiController
{
[HttpGet]
[Route("{argument1}/{argument2}/{argument3}/{argument4}")]
public string StartValidation(string argument1, string argument2, string argument3, string argument4)
{
// operations...
}
}
我按照答案中的建议使用 IIS 失败请求跟踪来跟踪请求,但我无法在生成的日志中找到线索:
在 IIS 上启用失败的请求跟踪以进行检查。
很有可能 IIS 拒绝这些作为 URLScan 的一部分(如果启用),但 FRT 会确认。
首先尝试将其部署到您本地的IIS,如果成功,则意味着您的产品可以在IIS级别具有不同的配置,或者编译后的代码与您拥有的代码不一样需要重新部署 api。 如果 api 在您的本地 IIS 级别失败并且它从 vs 正常运行(如果您向邮递员传递任何参数)您遇到了后端断点,那么您的本地部署配置错误IIS。 如果您从未遇到断点,那么您的代码级别就会出错。 希望这有帮助
我终于解决了这个问题。我添加了一段代码,由 this answer to a quite identical question, to the web.config, but a different issue arose: it seemed IIS had to be run in "Integrated Mode". Thanks to the clue given by this answer 提供给一个关于此后续问题的问题,我切换了 部署了 API 的应用程序池的托管管道模式 从 Classic 到 Integrated,这使得该代码可以工作。网络 API 终于接受带句点的参数。