Web api 2字符串路由失败

本文关键字:路由 失败 字符串 api Web | 更新日期: 2023-09-27 18:22:18

我正在尝试在c#中使用web api,到目前为止,它运行得很好,但我只是有一条不想工作的路线,我四处寻找有类似问题的人,但他们的解决方案似乎不起作用。我试图有一个特定的路线,并在字符串中捕获一个电子邮件地址,这是我的控制器:

[Authorize]
[RoutePrefix("api/contact")]
public class ContactController : ApiController
{
    [Route("list/{id:int}")]
    [HttpGet]
    public ContactList GetList(int id)
    {
        BasicAuthenticationIdentity identity = (BasicAuthenticationIdentity)this.User.Identity;
        ContactModel contactModel = new ContactModel(identity.accountId);
        return (contactModel.GetList(id));
    }
    [Route("list/{id:int}")]
    [HttpPost]
    public void PostList(int id)
    {
        BasicAuthenticationIdentity identity = (BasicAuthenticationIdentity)this.User.Identity;
        // To be implemented
    }
    [Route("attribute/{contactKey}")]
    [HttpGet]
    public IEnumerable<ContactData> GetContactAttributeKey(string contactKey)
    {
        BasicAuthenticationIdentity identity = (BasicAuthenticationIdentity)this.User.Identity;
        ContactModel contactModel = new ContactModel(identity.accountId);
        return (contactModel.GetContactAttribute(contactKey));
    }
}

列表路径运行良好,但当我尝试以下操作时http://localhost/api/contact/attribute/test@test.com我一直收到HTTP错误404.0-找不到,因为它似乎找不到路由。这里面有什么问题吗?

我在webconfig 中也有这个

// Itinéraires de l'API Web
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

我试着看看是否可以设置其他相同的路线,但没有其他路线,我只有一个帐户和分段路线,如果有人建议我现在对一切都持开放态度:/

Web api 2字符串路由失败

您应该使用%40而不是@符号,使用%2E而不是.符号。

http://localhost/api/contact/attribute/test%40test%2Ecom

这被称为URL编码,有些字符在URL中无效。

好的,这是dotctor的答案(使用url编码)的组合,并且需要在web.config 中启用它

<configuration>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />