【问题标题】:Web api 2 string route failingWeb api 2字符串路由失败
【发布时间】:2015-11-17 15:14:48
【问题描述】:

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

[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 }
);

我试图查看是否可以设置其他相同的路线,但没有其他路线,我只有一个帐户和分段路线,如果有人有任何建议,我现在对所有事情都开放:/

【问题讨论】:

  • 如果你传递一个没有'@'的字符串值会发生什么?

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


【解决方案1】:

您应该使用%40 代替@ 符号和%2E 而不是.

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

这叫URL encoding,某些字符在 URL 中无效。

【讨论】:

  • 我之前尝试过,但我只是通过删除'。'再次做到了。的 test.com 使它像 test%40testcom 现在它可以工作,但是使用 test%40test.com 它不起作用。我会尝试检查原因,但是 afaik 这不应该被编码为字符吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2018-08-25
    相关资源
    最近更新 更多