[英]How to pass url parameter with spaces in Web API
我已经使用 ASP.NET Web API 为我的应用程序开发了 Web 服务。 查找代码以从 WEP API 访问数据
namespace ProjectTrackingServices.Controllers
{
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class PTEmployeesController : ApiController
{
[Route("api/ptemployees/{name:alpha}")]
public HttpResponseMessage Get(string name)
{
var employees = EmployeesRepository.SearchEmployeesByName(name);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);
return response;
}
}
}
我可以使用他们的 name 过滤特定的员工数据,其中 name 字符串中没有空格。 例如:网址: http://localhost:55487/api/ptemployees/john
当我尝试通过 url ex 过滤具有全名 [有空格] 的员工时:Url:“ http://localhost:55487/api/ptemployees/john markus ” 错误将返回“NetworkError: 400 Bad Request - http://本地主机:55487/api/ptemployees/john%20m "
因此,任何人都可以帮助如何使用空格传递 url 参数并在 WEP API 中返回成功状态。
问题是路由中的属性constraint:
[Route("api/ptemployees/{name:alpha}")]
alpha
约束要求所有字符都是字母字符,并且不包括空格。 您需要删除或更改约束(如果要更改它,最简单的方法是使用regex
约束)。
从属性路由的文档中:
alpha 匹配大写或小写拉丁字母字符 (az, AZ)
调用您的 API 的人应确保他们按照 http 规范对 URL 参数进行编码。 如果调用者使用 .net,则所有 url 参数都应通过HttpUtility.UrlEncode()静态方法传递。 在上述情况下,这会将 url 转换为http://localhost:55487/api/ptemployees/john%20markus
在调用 API 时,因为它现在符合 HTTP 协议,所以 WEB API 将知道如何使用适当的空格对其进行解码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.