我正在尝试构建一个代理,该代理将接受来自现有客户端的请求,这些客户端通过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");
}
}
答案 0 :(得分:0)
将其添加到Startup.Configure
,UseRouting
或UseRouter
调用之前的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);
});