Web api 2 字符串路由失败
Web api 2 string route failing
我正在尝试在 c# 中使用网络 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 }
);
我试着看看是否可以设置其他相同的路线,但没有其他路线,我只有一个帐户和除此之外的分段路线,如果有人有任何建议,我现在对所有事情都持开放态度:/
您应该使用 %40
代替 @
符号,使用 %2E
代替 .
。
http://localhost/api/contact/attribute/test%40test%2Ecom
这叫做URL encoding,有些字符在URL中无效。
好的,这是医生回答的组合(使用 url 编码),并且还需要在您的 web.config
中启用它
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
我正在尝试在 c# 中使用网络 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 }
);
我试着看看是否可以设置其他相同的路线,但没有其他路线,我只有一个帐户和除此之外的分段路线,如果有人有任何建议,我现在对所有事情都持开放态度:/
您应该使用 %40
代替 @
符号,使用 %2E
代替 .
。
http://localhost/api/contact/attribute/test%40test%2Ecom
这叫做URL encoding,有些字符在URL中无效。
好的,这是医生回答的组合(使用 url 编码),并且还需要在您的 web.config
中启用它<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />