我已经为我的应用程序使用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;
}
}
}
我可以使用名称过滤特定的员工数据,该名称在名称字符串中没有空格。 例如:网址:http://localhost:55487/api/ptemployees/john
当我尝试按网址过滤全名[有空格]的员工时 例如:网址:" http://localhost:55487/api/ptemployees/john markus" 错误将返回 " NetworkError:400错误请求 - http://localhost:55487/api/ptemployees/john%20m"
所以任何人都可以帮助如何使用空格传递url参数并在WEP API中返回成功状态。
答案 0 :(得分:3)
问题是路线中的属性:
[Route("api/ptemployees/{name:alpha}")]
alpha
约束要求所有字符都是字母字符,并且不包含空格。您需要删除或更改约束(如果要更改它,最简单的方法是使用regex
约束。)
来自the documentation on attribute routing:
alpha匹配大写或小写拉丁字母字符(a-z,A-Z)
答案 1 :(得分:0)
调用API的人应确保按照http规范对URL参数进行编码。如果调用者使用.net所有url参数应该通过HttpUtility.UrlEncode()静态方法传递。在上述情况下,这会将网址转换为http://localhost:55487/api/ptemployees/john%20markus
调用API时,因为它现在符合HTTP协议,所以WEB API将知道如何使用适当的空格对其进行解码。