当资源ID使用连字符(短划线)构建时,WebAPI获取失败 -

时间:2018-03-20 23:06:51

标签: c# asp.net asp.net-web-api .net-core asp.net-web-api-routing

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

500.19 - >无法添加“add”类型的重复集合条目,并将唯一键属性“name”设置为“aspNetCore”

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

只有当我调用的调用在URI id中有短划线字符时才会发生 例: http://mysite/api/products/product10工作正常,代码执行 但: http://mysite/api/products/product10-1不起作用,WebAPI永远不会被击中,错误如下所示。我没有对routing或web.config进行任何更改,也没有对Controller进行任何更改。我不明白这里发生了什么变化。

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

无法添加“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)

1 个答案:

答案 0 :(得分:0)

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

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

这是为了摆脱架构 url 中的 .json 扩展名而编写的,但影响了所有 url。 查看您的 Startup.cs 并查找类似的内容。您可能进行了影响所有网址的修改。