我有一个默认的Asp.Net路线如下:
public ActionResult Index(string id)
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
没什么特别的。
我在Home Controller中有超级简单的默认操作:
A potentially dangerous Request.Path value was detected from the client (&).
我可以输入网址:http://localhost:12143/Home/Index/HanselandCratel
它工作正常,但是当我输入
时http://localhost:12143/Home/Index/Hansel&Cratel
它没有
我理解&必须编码,但当我输入:
http://localhost:12143/Home/Index/Hansel%26Cratel
它仍然无法正常工作我收到此错误:
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
我知道在web.config中设置它:
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log("worker ${worker.process.pid} died");
cluster.fork();
});
} else {
var express = require('express');
var http = require('http');
// init app
var app = express();
function createServer(app) {
return http.createServer(app);
}
app.locals.server = createServer(app);
app.locals.server.listen(port, function() {
console.info("server online");
});
}
但我恐怕在这样做时我必须牺牲安全。
还有其他替代品吗?也许是Asp.Net中的任何设置?
答案 0 :(得分:4)
我知道在web.config中设置它:
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
不要这样做,您将删除此请求验证规则提供的所有保护。如果您想允许&amp; 字符,请将所有其他字符保留在原位:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,:,\,?" />
但我恐怕在这样做时我必须牺牲安全。
这样,您的请求网址中将允许&amp; 。小心正确验证所有输入参数,并最终根据需要转义它们。请注意,它也应该使用原始规则就地完成...
您可以重新包含其他字符,但我建议仅在需要时才这样做。你也可以添加新的:有时我有文本ID作为参数(对于AJAX GET请求),即使我确定我还没有建立一个连接字符串的SQL命令......我通常会添加&#39; (以及其他一些人)。
还有其他替代品吗?也许是Asp.Net中的任何设置?
是的,您可以回到.NET 2.0规则,但我认为没有理由这样做......
答案 1 :(得分:0)
[ValidateInput(false)] //write this
public ActionResult Index(string id)
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
<pages validaeRequest="false" />
尝试第1行。可能会对你有用。