Web api 2字符串路由失败

时间:2015-11-17 15:14:49

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

我试图在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 }
);

我试图看看其他路线是否可以设置相同但没有其他路线,我只有一个帐户和分段路线除此之外,如果有人得到一些建议我现在对所有事情开放:/

2 个答案:

答案 0 :(得分:3)

您应使用%40代替@符号和%2E代替.

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

这称为URL encoding,某些字符在网址中无效。

答案 1 :(得分:1)

好的,它是dotctor答案的一个组合(使用url编码),还需要在你的web.config中启用它。

...
<table class="display dataTable" id="partneri"></table>
...