繁体   English   中英

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

[英]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;
        }
    }
}
  1. 我可以使用他们的 name 过滤特定的员工数据,其中 name 字符串中没有空格。 例如:网址: http://localhost:55487/api/ptemployees/john

  2. 当我尝试通过 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM