我的路由配置文件或Asp.Net MVC应用程序中的其他内容都出现问题,该应用程序在我访问的每个控制器中都会触发每个索引操作方法。如果我单击下面的操作链接,我将转到页面/配置文件/常规,查看在屏幕上呈现的视图结果,但随后在应用程序中的某些内容,不确定是什么,触发在该控制器上调用的索引操作!因为我没有在大多数控制器上使用索引操作方法,所以我最终会获得访问每个页面的异常。
离。我点击下面的操作链接
@Html.ActionLink("Profile", "general", "profile", new { }, new { @class = "btn-sm", @style = "font-weight: bold; font-size: 1em;" })
或者只是刷新浏览器。 我进入下面的一般行动方法
public ActionResult General()
{
try
{
ViewBag.MenuItem = "profile";
ViewBag.UserMenuItem = "general";
var viewModel = _yogaProfileService.GetGeneralInfo(User.Identity.GetUserId());
return View(viewModel);
}
catch (Exception ex)
{
_errorService.LogError(ex, Request);
ViewBag.Message = "Oh No! Something went wrong fetching your info. We're looking into this now!";
return View("Error");
}
}
视图被调用,我在页面上看到它,但是然后在同一个控制器上调用了索引方法,我在这里进入索引操作方法。调试器进入下面的方法。它没有在屏幕上呈现索引的视图,我仍然看到一般视图,所以不确定这里发生了什么!
public ActionResult Index()
{
try
{
ViewBag.MenuItem = "profile";
return View();
}
catch (Exception ex)
{
_errorService.LogError(ex, Request);
ViewBag.Message = "Oh No! Something went wrong fetching your profile. We're looking into this now!";
return View("Error");
}
}
当然我只是为了显示原因而在这里使用了索引方法,所以在应用程序中我删除了它,所以我几乎每次访问的页面都会抛出异常,因为它在我访问的每个控制器上查找索引操作方法
System.Web.HttpException:公共行动方法'索引'在控制器' YogaBandy2017.Controllers.ProfileController'中找不到。
我不知道这是路由问题还是其他问题?我试着在调试器中查看网络,以确定调用索引的内容,以及调用堆栈,但它只是说“外部”#39;是否可能有一些Javascript正在调用它,如果是这样,我将如何寻找它?
这是我的路由文件
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "RateRoute",
url: "rate/event/{id}",
defaults: new { controller = "rate", action = "event" },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "SpaceCleanRoute",
url: "space/{id}",
defaults: new { controller = "space", action = "index", id = UrlParameter.Optional },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "PublicSpaceRoute",
url: "space/public/{title}",
defaults: new { controller = "space", action = "public" },
constraints: new { title = @"^[A-Za-z0-9-]+$" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
更新 - 我只在IE中看到它,Chrome和Firefox没有我的问题 这是我的调试器的图片,显示待处理的请求
UPDATE2 - 我不相信这是一个Javascript问题,如果我没有加载.js文件,索引仍会被调用。所以我不相信它与Javascript有任何关系
答案 0 :(得分:1)
在Stackoverflow聊天讨论后,我们发现IE 11正在触发对以下内容的默认操作的调用:
<link href="" rel="icon">
IE正在为Controller的默认操作生成XMLHttpRequest。
这发生在IE 11中。
删除空href=""
后,我们就可以解决此问题。
以下是解决方案:
<link rel="icon">
根据HTML5预览规范:
https://dev.w3.org/html5/spec-preview/the-link-element.html#attr-link-href
链接的目的地由href属性给出,其中 必须存在且必须包含有效的非空URL 被空间包围。如果没有href属性,那么 element没有定义链接。
指示的链接类型(关系)由rel属性的值给出,如果存在,则必须具有一组空格分隔的标记。允许的关键字及其含义在后面的部分中定义。如果不存在rel属性,没有关键字,或者根据本规范中的定义,如果不允许使用任何关键字,则该元素不会创建任何链接。
可以使用link元素创建两类链接:Links 外部资源和超链接。链接类型部分定义 特定链接类型是外部资源还是超链接。 一个链接元素可以创建多个链接(其中一些链接可能是 外部资源链接,有些可能是超链接);究竟是哪个 以及创建了多少链接取决于中给出的关键字 rel属性。用户代理必须基于每个链接处理链接, 不是每个元素的基础
外部资源链接的确切行为取决于 确切关系,如相关链接类型所定义。某些 属性控制外部资源是否是 应用(定义如下)。
对于DOM中表示的外部资源(例如, 样式表),即使表示DOM表示也必须可用 资源未应用。要获取资源,请使用用户代理 必须执行以下步骤:
- 如果href属性的值为空字符串,则中止这些步骤。
- 解析href属性给出的URL,相对于 元件。
- 如果上一步失败,则中止这些步骤。
- 获取生成的绝对URL。
醇>
话虽如此,由于空的“href”值,IE11似乎没有中止上面定义的步骤......它继续解析步骤4中定义的外部资源。
与Edge有一些讨论。
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8088887/