Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何允许URL在ASP.NET MVC5中包含点?_C#_Asp.net_Regex_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 如何允许URL在ASP.NET MVC5中包含点?

C# 如何允许URL在ASP.NET MVC5中包含点?,c#,asp.net,regex,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Regex,Asp.net Mvc,Asp.net Mvc 5,我正在开发一个允许在URL中使用点的网站,比如www.mysite.com/somedata/my.name-123。 我期望的行为是使该url等效于www.mysite.com/somedata/myname-123,但我得到的是404个错误,因为这些点使IIS尝试查找静态文件。可以找到一个类似的问题,但正如我在下面解释的那样,建议的解决方案在我的案例中不起作用。这就是我尝试过的: 添加一个新的处理程序(如建议的)不起作用,因为我需要它来处理多个路径。如果我设置path=“*”则所有静态文件

我正在开发一个允许在URL中使用点的网站,比如
www.mysite.com/somedata/my.name-123
。 我期望的行为是使该url等效于
www.mysite.com/somedata/myname-123
,但我得到的是404个错误,因为这些点使IIS尝试查找静态文件。可以找到一个类似的问题,但正如我在下面解释的那样,建议的解决方案在我的案例中不起作用。这就是我尝试过的:

  • 添加一个新的处理程序(如建议的)不起作用,因为我需要它来处理多个路径。如果我设置path=“*”则所有静态文件(例如.css文件)都会失败。我可以使用正则表达式指定url模式,但据我所知,path属性不允许使用它(只允许使用通配符)

  • 在MVC5中,在web.config中使用像
    这样的行根本不起作用

  • 添加到web.config中的system.webServer部分实际上是可行的,但由于许多原因,不鼓励这种做法,这是公开的,因此如果可能的话,我尝试避免这种方法

  • 在URL后面加一个斜杠(/)也可以解决这个问题,但是这样做会让Google认为我提供的是重复内容,所以我不能使用这个解决方案

我想不出其他的选择。理想情况下,我希望添加一个新的处理程序,使其适用于所有URL,但以特定模式(.css、.js)结尾的URL除外


更新: 我找到了一个适合我的解决方案。我将尝试解释我采取的步骤:

首先,我找到了一个很好的解释,解释了为什么会发生这种行为:。还讨论了上面列出的一些解决方案。在对文章进行放射线处理后,我决定使用重写规则处理虚线URL。我没有添加一个尾随斜杠,而是决定在没有麻烦点的情况下提供url,然后检查用户在我的应用程序的控制器中寻找什么。我的基本规则如下所示:

<rule name="remove troublesome dots" stopProcessing="false">
    <match url="^(.*)\.(\S*)$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}{R:2}" />
</rule>


,在“为特定文件结尾添加条件”部分。

我记得几个月前遇到过这种情况。我真的很匆忙,所以我所做的可能不是推荐的方法

我只指定了一个段,然后创建了相应的正则表达式作为约束

例如,结果会是这样的:

url
somedata/{dottered}

约束
虚线:“(.*\)*.*”


正则表达式是非常通用的,为了避免无效的符号,您应该将它重新格式化为只接受支持的字符。

您在哪里声明的?在RouteConfig文件中?否则,在web.config的哪个部分允许这样做?我们有自己的XML文件用于声明路由,但您应该在
RouteConfig.cs
中进行配置。声明新路由时不应触摸
Web.config
。这对我不起作用,因为圆点使IIS认为正在请求文件,因此永远无法访问路由处理程序。解释得很好。他还提供了一些解决方案,可能会有助于解决我同样的问题。