WebAPI 获取 当资源 ID 使用连字符(破折号)进行结构时失败 -



此错误刚刚开始发生。 一切正常,然后突然在进行 WebAPI Get 调用时开始发生此错误。

500.19 --> 无法添加类型为"add"且唯一键属性"name"设置为"aspNetCore"的重复集合条目

在 WebAPI 项目中,我可以更改项目属性中的"应用程序 URL",这将创建一个新的 IIS 应用程序,使用此应用程序,现在一切都可以正常工作。 因此,如果我去删除IIS中的原始应用程序。 返回到 Visual Studio,重新输入旧的应用程序 URL,以便它以旧名称在 IIS 中重新创建应用程序,然后运行它。 它再次失败。 这是全新的。 无论哪个 IIS 应用程序正在执行代码,都完全相同的代码库,但在下面描述的情况下,原始代码库不再有效 - 即使在删除并重新创建它之后也是如此。 这一定是一个疯狂的错误,因为我没有修改任何东西。 它只是在测试过程中自动开始中断。

仅当我进行的调用在 URI id 中具有短划线字符时,才会发生这种情况。
示例: http://mysite/api/products/product10 工作正常,代码执行。
但: http://mysite/api/products/product10-1 不起作用,则永远不会命中 WebAPI,错误如下所示。 我没有对路由或 web.config 以及控制器进行任何更改。 我不明白这里发生了什么变化。

WebAPI .NET Core 2.0 运行在 Windows/IIS 上。

无法添加类型为"add"且唯一键属性"name"设置为"aspNetCore"的重复集合条目

4:     <handlers>
5:       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
6:     </handlers>

签名:

[Produces("application/json")]
[Route("api/Product")]
public class ProductController : Controller
{
// GET api/values/5
[HttpGet("{id}")]
public async Task<IActionResult> Get(string id)

我们的解决方案是重写,我们在 Startup.cs 文件中对架构 url 进行了重写。由于重写对所有网址进行了网址修改,因此所有包含破折号的请求都受到影响。我们已经从启动中删除了以下行.cs它按预期工作。

.UseRewriter(new RewriteOptions().AddRewrite(@"(.*)/([a-z-]+)(d{1,2}.d{1,2}.d{1,2})", "$1/$2$3.json", true))

这是为了摆脱架构 url 中的 .json 扩展名而编写的,但影响了所有 URL。 查看您的初创公司.cs并寻找类似的东西。您可能进行了影响所有网址的修改。

最新更新