将URL /路径发送到ASP.NET MVC控制器操作

时间:2009-11-11 12:46:52

标签: asp.net-mvc model-view-controller

基于各种来源,显然不可能将类似“/Content/Scripts/jquery.js”的路径作为参数发送到MVC操作,因为正斜杠用作参数分隔符“/”和ASP.NET MVC返回400错误。

到目前为止,我发现的唯一可行解决方案是对Base64进行编码,将其作为参数值发送并在控制器操作中对其进行解码。我像这样编码JS文件的路径:

http://localhost/vdir/Services/GetJavaScript/=L3JzaDIwMTAvQ29udGVudC9XaWRnZXRGcmFtZXdvcmsvd2lkZ2V0Lmpz/=aHR0cDovL2xvY2FsaG9zdA==

我需要它,因为我使用控制器操作返回JavaScriptResult,用于将缩小和修改的JavaScript注入页面,在这种情况下我不想使用http处理程序。

问题:这真的是ASP.NET MVC的唯一方法吗?因为它看起来不太友好,不是很多用户会去观看页面源但是反正......;)

4 个答案:

答案 0 :(得分:2)

通配符映射可以让您将路径作为路径变量传递。见File path as MVC route argument

答案 1 :(得分:1)

您可以使用“老式”查询字符串方法:

http://localhost/vdir/Services/GetJavaScript?script=/Content/Scripts/jquery.js

让GetJavaScript方法接受一个名为script的字符串:

public ActionResult GetJavaScript(string script)

答案 2 :(得分:1)

Url对其进行编码。它应该是这样的:

http://localhost/vdir/Services/GetJavaScript/%2FContent%2FScripts%2Fjquery.js

如果这不起作用,请将其放入查询字符串中:

http://localhost/vdir/Services/GetJavaScript?js=%2FContent%2FScripts%2Fjquery.js

HTHS,
查尔斯

答案 3 :(得分:0)

您是否只能将/替换为其他字符,例如|?它仍然会使URI干净,但不会干扰路由。如果您的所有脚本都在同一目录中,您可以默认使用它并从引用中删除路径,从而完全避免问题。