如何路由URI中包含分号的请求

时间:2019-07-03 20:18:27

标签: c# .net-core

我正在尝试构建一个代理,该代理将接受来自现有客户端的请求,这些客户端通过URI中的分号发送POST请求。原始客户端同时传递会话ID和客户端ID,如下例所示。

示例网址: https://myappdomain.com/api/updateData;jsessionid=xxxx?clientId=yyyy

我实际上不在乎那些值是什么。我的主要问题是我不知道如何获取网络API来路由请求。如果我用问号(?)替换分号或将“; jsessionid = xxxx”移到URL的“?clientId”之后,则可以正常工作。但是,如果“; jsessionid = xxxx”紧跟在方法名称之后,我将无法使用它。

我尝试了很多方法来查看是否可以保留原始URI,但始终会收到404 Not Found错误。

[Route("api/[controller]")]
[ApiController]
public class UpdateDataController : ControllerBase
{
    [HttpPost]
    public IActionResult Post([FromBody] CustomClass value)
    {
        return Ok("OK");
    }
}

2 个答案:

答案 0 :(得分:0)

将其添加到Startup.ConfigureUseRoutingUseRouter调用之前的UseMvc方法中。

app.Use(next => http =>
{
    http.Request.Path = new PathString(http.Request.Path.Value.Replace(';', '?'));
    return next(http);
});

答案 1 :(得分:0)

非常感谢@Alsein为我指出了正确的方向。尝试将路径更改为问号(?)给我带来了问题。我还发现(?)之后的参数不属于http.Request.Path。因为我在原始请求中不需要; jsessionid,并且(?)之后的参数也不是原始http.Request.Path的一部分,所以我只删除了分号(;)之后的所有内容

app.Use(next => http =>
{
    if (http.Request.Path.Value.Contains(';'))
    {
        http.Request.Path = new PathString(http.Request.Path.Value.Substring(0, http.Request.Path.Value.IndexOf(';')));
    }
    return next(http);
});