ASP.Net MVC一直为我称之为

时间:2018-04-21 21:58:21

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

我的路由配置文件或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没有我的问题 这是我的调试器的图片,显示待处理的请求

enter image description here

UPDATE2 - 我不相信这是一个Javascript问题,如果我没有加载.js文件,索引仍会被调用。所以我不相信它与Javascript有任何关系

1 个答案:

答案 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表示也必须可用   资源未应用。要获取资源,请使用用户代理   必须执行以下步骤:

     
      
  1. 如果href属性的值为空字符串,则中止这些步骤。
  2.   
  3. 解析href属性给出的URL,相对于   元件。
  4.   
  5. 如果上一步失败,则中止这些步骤。
  6.   
  7. 获取生成的绝对URL。
  8.   

话虽如此,由于空的“href”值,IE11似乎没有中止上面定义的步骤......它继续解析步骤4中定义的外部资源。

与Edge有一些讨论。

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8088887/