ASP.NET Web API如何传递含/的参数值至Action方法?
解决ASP.NET Web API传递含/字符参数的404问题
当参数DecpName包含/字符(如EEPS/RA)时,当前路由配置会导致URL被错误解析,触发HTTP Error 404.0 - Not Found,可以通过以下几种方式解决:
方法一:修改路由模板,启用贪婪匹配
修改路由特性,在参数名后添加*,让路由捕获包含/的完整参数值:
[HttpGet] [Route("GetAllInventoryData/{DecpName*}")] public IHttpActionResult GetInventoryData(string DecpName) { try { // 业务逻辑实现 } catch(Exception ex) { // 异常处理逻辑 } }
{DecpName*}属于贪婪匹配规则,会将该位置之后的所有字符(包括/)都作为DecpName的参数值,确保路由能正确匹配请求。
方法二:对参数进行URL编码
在前端发起请求前,将DecpName的值做URL编码,/对应的编码值为%2F。例如EEPS/RA编码后变为EEPS%2FRA,此时请求URL为:GetAllInventoryData?DecpName=EEPS%2FRA
后端会自动对编码后的参数进行解码,无需修改现有路由配置。
方法三:改用POST请求,将参数放入请求体
如果参数内容复杂,可将请求方式改为POST,把参数放在请求体中传递,避免URL解析的限制:
[HttpPost] [Route("GetAllInventoryData")] public IHttpActionResult GetInventoryData([FromBody] string DecpName) { try { // 业务逻辑实现 } catch(Exception ex) { // 异常处理逻辑 } }
前端发送POST请求时,将DecpName的值放入请求体即可。
内容的提问来源于stack exchange,提问作者Codev
相关产品推荐
相关产品推荐

