C# Mvc 3-控制器作为图像处理程序,如何传递路径?

C# Mvc 3-控制器作为图像处理程序,如何传递路径?,c#,asp.net-mvc-3,controller,C#,Asp.net Mvc 3,Controller,我试图将控制器用作图像处理程序,但如何传递到它的路径 现在看起来是这样的(适用于没有路径的图像): 产生以下结果: 这导致: HTTP错误400-请求错误 如何使用普通mvc方法将路径传递给控制器? (我使用的是向后斜杠,而不是向前斜杠) 我还使用HttpUtility.UrlEncode对参数进行了测试。在.NET 4.0 beta 2中,CLR团队提供了一种解决方法 将其添加到web.config文件: <uri> <schemeSettings>

我试图将控制器用作图像处理程序,但如何传递到它的路径

现在看起来是这样的(适用于没有路径的图像):

产生以下结果:

这导致: HTTP错误400-请求错误

如何使用普通mvc方法将路径传递给控制器? (我使用的是向后斜杠,而不是向前斜杠)
我还使用HttpUtility.UrlEncode对参数进行了测试。

在.NET 4.0 beta 2中,CLR团队提供了一种解决方法

将其添加到web.config文件:

<uri> 
    <schemeSettings>
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
</uri>


这会导致Uri类按照描述Uri的RFC进行操作,从而允许在路径中转义斜杠,而不会取消转义。CLR团队报告说,由于安全原因,它们偏离了规范,并且在.config文件中设置此选项基本上使您能够掌握不删除斜杠所涉及的其他安全注意事项。

根据您的代码:html页面中生成的链接应为: 在action方法中,参数变量应正确设置为“folder1\folder2\folder3\picture.jpg”


请注意,您可能容易受到此处的攻击。

您不能仅解码参数吗


不要调用文件名参数“parameter”并在路由中定义它,而是调用它“filename”,而不要在路由中定义它

您的操作代码将是相同的,但文件名将不再是路由的一部分,而只是一个普通的URL参数

如果你因为不喜欢URL参数而被本季的时尚所困扰,那么你可能会发现这令人反感,但这只是时尚,可以被安全地忽略


就个人而言,我不会将这样的路径传递到web应用程序中,因为我绝对不会因为错误而产生遍历威胁——我只会传递无路径文件名,根据列表验证它们,然后获取文件。

这不符合mvc路径吗?对不起,我不明白你所说的mvc路径。能否在html(呈现页面的查看html源代码)中添加视图生成的url,以及控制器方法中变量“parameter”的值(仅在此处设置断点)?另外,您是否有用于GetImage操作的特殊路由?URL甚至不会触发控制器。我无法解码我没有得到的东西=/
@Html.ActionLink("Show", "GetImage", "Utility", new { parameter = @"folder1\folder2\folder3\picture.jpg" }, new { })
<uri> 
    <schemeSettings>
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
</uri>