Asp.Net MVC路由不接受&在路线上

时间:2016-09-07 12:26:57

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个默认的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中的任何设置?

2 个答案:

答案 0 :(得分:4)

  

我知道在web.config中设置它:<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />

不要这样做,您将删除此请求验证规则提供的所有保护。如果您想允许&amp; 字符,请将所有其他字符保留在原位:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,:,\,?" />
  

但我恐怕在这样做时我必须牺牲安全。

这样,您的请求网址中将允许&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行。可能会对你有用。