【问题标题】:How to pass url parameter with spaces in Web API如何在 Web API 中传递带有空格的 url 参数
【发布时间】:2015-05-25 07:13:37
【问题描述】:

我已经为我的应用程序使用 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 过滤全名[有空格]的员工时 例如:网址:“http://localhost:55487/api/ptemployees/johnmarkus” 错误将返回 “NetworkError:400 错误请求 - http://localhost:55487/api/ptemployees/john%20m

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

【问题讨论】:

  • 在 API 映射中您提到了 {name:alpha},因此 alpha 不包含空格,因此请更改 URL 映射然后尝试
  • 达梅什,是的。当更改 url 映射时它工作正常
  • @Dharmesh 无论您认为您的评论是简单的还是显而易见的,您都应该在答案中包含明确的信息,以明确该 Q 有一个 A,因此对其他人有用

标签: c# asp.net-web-api


【解决方案1】:

问题是路由中的属性constriant:

[Route("api/ptemployees/{name:alpha}")]

alpha 约束要求所有字符都是字母字符,并且不包括空格。您需要删除或更改您的约束(如果您想更改它,最简单的方法是使用regex 约束)。

来自the documentation on attribute routing

alpha 匹配大写或小写拉丁字母字符(a-z、A-Z)

【讨论】:

    【解决方案2】:

    调用您的 API 的人应确保他们按照 http 规范对 URL 参数进行编码。如果调用者使用 .net,则所有 url 参数都应通过 HttpUtility.UrlEncode() 静态方法传递。在上述情况下,这会将 url 转换为 http://localhost:55487/api/ptemployees/john%20markus

    调用 API 时,由于它现在符合 HTTP 协议,WEB API 将知道如何使用适当的空格进行解码。

    【讨论】:

    • 答案已经在评论中了。我要求发表评论的人将其转化为答案,但是,由于他没有,我自己已经完成了。在这种情况下,URL 编码不是问题。
    猜你喜欢
    • 2015-07-09
    • 2021-07-16
    • 2017-12-09
    • 2017-07-18
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多