当URL末尾有一个 "点 "时,出现 "找不到该资源 "的错误。

 2023-02-17    393  

问题描述

我正在使用ASP .NET MVC测试版,当我使用此URL时,我收到HTTP 404(找不到资源)错误:

我试图调试,但它我会在mvchandler的processRequest之前从”system.web.cachedathdata.getconfigpathdata(string configpath)”中获取错误.

当URL末尾有一个 "点 "时,出现 "找不到该资源 "的错误。

是”点”不允许在URL的末尾?或者有没有办法修复路由定义以处理此URL?


是一个示例:我有一个名为detware1 [id(整数),代码(字符串),description(string)]的表,它与master1通过它的ID列具有Fk关系.每当我选择Master1的记录时,我也选择它是详细信息1记录以获取它的代码字段.为了不要每次使此加入(因为通常不仅有一个细节,有多个),我选择不使用ID列,我制作Codent1的代码PK.

但是当我摆脱id并使用代码作为pk时,我的路由也开始使用代码字段,如:detail1 \ edit \ code1

此代码可以在其中或结束时具有任何内容,包括点.有些情况下我可以在最后禁止点,但有时它真的有意义.

和我也看到了这个 post 那个路线可能非常灵活,所以我不认为我的是如此奇怪.

所以这就是为什么我做某事如此非标准.任何建议?

还为什么在URL结束时有一个点才会如此奇怪?

推荐答案

如果使用.NET 4.0,可以在Web.config的System.Web部分中设置此标志.CONFIG,它将被允许:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

我已经测试过它,它有效. haack 有一个解释它.

其他推荐答案

这可以在从1.0和Up的每个ASP.Net版本中以几种方式解决.我知道这是在这个线程创造的两年后,但无论如何,这里是:

原因

创建自定义错误处理程序,或在IIS中配置自定义页面以重定向404将无法正常工作.原因是ASP.NET考虑这个URL危险.内部在System.Web.Util.FileUtil中,ASP.NET调用私有方法IsSuspiciousPhysicalPath,这试图将路径映射到(虚拟但合法)文件名.

当生成的合法路径不等于原始路径时,处理停止且ASP.NET代码返回404(它不会要求自定义404的IIS或Web.config.它返回一个本身这么难以做到这一点).

Windows资源管理器以同样的方式工作.尝试在一个或多个点中创建一个结尾的文件名,即test.txt..您会发现生成的名称是text.txt.

在ASP.NET

中的点中结束URL的解决方案

解决方案很简单(一旦你知道,它一直是).就在它发出这个404之前,它将调用 ,您可以在Global.asax.cs(或VB等效物)中注册的简单事件.以下代码将返回浏览器的简单文本,但还可以将简单的文本返回到浏览器或其他任何其他有效响应也是可能的.

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{

    HttpResponse response = this.Context.Response;
    HttpRequest request = this.Context.Request;
    if (request.RawUrl.EndsWith("."))
    {
        response.ClearContent();
        response.StatusCode = 200;
        response.StatusDescription = "OK";
        response.SuppressContent = false;
        response.ContentType = "text/plain";
        response.Write("You have dot at the end of the url, this is allowed, but not by ASP.NET, but I caught you!");
        response.End();
    }
}

注意:当”aspx”是 not 部分URL时,此代码也有效.即, http://example.com/app/somepath .会打电话给这个活动.另请注意,某些路径仍然无法正常工作(以多个点结束,具有Hash-Tag,例如

其他推荐答案

嗯,在.NET 4.5中,我通过将”/”添加到URL的末尾来修复此问题.

所以,在您的情况下,它将是”http://localhost:81/title/编辑/code1./”.这是我唯一的事情,我不必添加httpruntime设置.

以上所述是小编给大家介绍的当URL末尾有一个 "点 "时,出现 "找不到该资源 "的错误。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34257.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。