【问题标题】:C# MVC ASP.NET URL parameter in HTTP GET unencoded improperlyHTTP GET 中的 C# MVC ASP.NET URL 参数未正确编码
【发布时间】:2016-04-13 11:59:45
【问题描述】:

所以我正在对我喜欢的新 WebAPI 执行 GET,我的参数之一是我使用 encodeURIComponent 转义的 URL。在提琴手中,请求看起来像

GET /api/myapi/myurl/https%3A%2F%2Ft.co%2FkIEnlT8Mvn HTTP/1.1

这样很好。

但是,如果我查看 Application_BeginRequest 中的请求,我会得到

?HttpContext.Current.Request.Url.AbsolutePath 
"/api/myapi/myurl/https:/t.co/kIEnlT8Mvn"

?HttpContext.Current.Request.Url.AbsoluteUri
"http://localhost:23652/api/myapi/myurl/https:/t.co/kIEnlT8Mvn" 

?HttpContext.Current.Request.Url.OriginalString
"http://localhost:23652/api/myapi/myurl/https:/t.co/kIEnlT8Mvn"

?Request.RawUrl
"/api/myapi/myurl/https:/t.co/kIEnlT8Mvn"

所以我的问题是:如何从客户端发送的内容中获取正确的 URL?我想要得到任何一个

一个好的 URL https:SlashSlasht.co/kIEnlT8Mvn(// 改变了,因为 SO 讨厌短 URL)

https%3A%2F%2Ft.co%2FkIEnlT8Mvn

不是 https://t.co/kIEnlT8Mvn

(我也尝试使用 escape() 和 encodeURL() 对 URL 进行编码,结果相同。)

【问题讨论】:

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


    【解决方案1】:

    斜线是 URL 部分之间的分隔符,它看起来像 .NET 或 MVC 内部的东西,或者路由系统通过删除重复的斜线对此采取了严格的措施。不知道能不能解决或者改变。

    我认为,如果您可以同时更改 API 和您正在进行的调用以使用查询字符串参数,它会起作用,如下所示:

    GET /api/myapi/myurl?address=https%3A%2F%2Ft.co%2FkIEnlT8Mvn HTTP/1.1

    public ActionResult MyUrl(string address)
    {
        // do your magic here...
    }
    

    【讨论】:

    • 是的,这是有道理的。我已将代码添加到我现有的处理程序以修复我得到的 URL,但您的解决方案可能会更好。不过,我可能会改变我的整个工作方式,因为我希望它能够尽可能少地胡闹。
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2014-11-28
    • 2018-09-15
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多