如何在Web API中传递带空格的url参数

时间:2015-05-25 07:13:38

标签: asp.net-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;
        }
    }
}
  1. 我可以使用名称过滤特定的员工数据,该名称在名称字符串中没有空格。 例如:网址:http://localhost:55487/api/ptemployees/john

  2. 当我尝试按网址过滤全名[有空格]的员工时 例如:网址:" http://localhost:55487/api/ptemployees/john markus" 错误将返回 " NetworkError:400错误请求 - http://localhost:55487/api/ptemployees/john%20m"

  3. 所以任何人都可以帮助如何使用空格传递url参数并在WEP API中返回成功状态。

2 个答案:

答案 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将知道如何使用适当的空格对其进行解码。