C# 使用Html.Action会导致查询字符串过长错误

C# 使用Html.Action会导致查询字符串过长错误,c#,asp.net,asp.net-mvc-4,asp.net-identity,C#,Asp.net,Asp.net Mvc 4,Asp.net Identity,我有一个_布局视图: @{ Layout = "~/Views/Shared/_NavLayout.cshtml"; } @section styles { @RenderSection("styles", required: false) } <div class="container" style="padding-top: 60px;"> <div class="row"> <div class="col-md-12"&

我有一个_布局视图:

@{
    Layout = "~/Views/Shared/_NavLayout.cshtml";
}
@section styles
{
    @RenderSection("styles", required: false)
}
<div class="container" style="padding-top: 60px;">
    <div class="row">
        <div class="col-md-12">
              @Html.Action("AccountNavigation")  
        </div>
    </div>
    @RenderSection("InlineTitle", required:false)
    @RenderBody()
</div>


@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @RenderSection("scripts", required: false)
}
否则我会得到:

行动方法是:

 [ChildActionOnly]
    public ActionResult AccountNavigation()
    {
        var roles = UserManager.GetRoles(User.Identity.GetUserId());
        ViewBag.IsAdmin = roles.Contains("Admin");
        return PartialView("_AccountNavigatorPartial");
    }
我试着把它剥去,只剩下:

 [ChildActionOnly]
        public ActionResult AccountNavigation()
        {

            ViewBag.IsAdmin = false;
            return null; 
        }
但这没什么区别

使用布局的子视图之一是登录

   [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.OidLoginFailed = false;
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }
如果我把一个中断点放在那里,我可以看到它在每个请求中被多次调用,并建立ReturnUrl,直到它失败,从而出现错误消息。这就是我剥离AccountNavigation操作方法的原因

我想可能是一个anon请求通过一些配置设置导致了一个post back,如果anon重定向到Login并循环,它就会循环,但我看不到在哪里被触发

帐户\u AccountNavigator Partial只是:

 <ul class="nav navbar-nav navbar-Left">
     <li>@Html.ActionLink("Manage Credentials", "Credentials", "Account", 
             routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
     <li>@Html.ActionLink("Manage Profile", "Profile", "Account", 
             routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
 </ul>
  • @ActionLink(“管理凭据”、“凭据”、“帐户”, RouteValue:null,htmlAttributes:new{id=“credentialsLink”})
  • @ActionLink(“管理配置文件”、“配置文件”、“帐户”, RouteValue:null,htmlAttributes:new{id=“credentialsLink”})

所以我所要做的就是为帐户导航注入一些html。我使用ASP.Identity作为会员身份,但我看不出这有什么区别,因为我请求的是一个不可访问的页面。

如果没有看到控制器,不知道您如何处理授权,很难判断,但是,因为您的登录页面正在使用该布局,由于您的子操作授权失败,您可能遇到循环呼叫


您是否尝试过将属性
[AllowAnonymous]
添加到您的子操作中?

我们得到了类似的
UriFormatException:无效URI:URI字符串太长。
-我们发现解决方案是将模型作为显式参数传递,而不仅仅是典型的方法

不起作用 工作
这似乎是由使用非常大的视图模型触发的-这必须将其包装并绕过编码问题
UriHelper.EscapeString
,它会溢出缓冲区。

我不确定你在问什么,因为它与我的问题有关?登录视图有一个可以发回的表单,但我甚至无法呈现最初的“获取发回”页面。上面提到的就是,当表单被提交时,它是发布的。但如上所述,我不确定我是否明白你的意思?好吧,那太尴尬了。我将一些代码重构到这个控制器中,它实际上在类级别上具有[Authorize]。但很明显,我并没有考虑到我的想法,这就是循环引用的来源。所以AllowAnonymous给了我这个动作所需的覆盖。非常感谢。
 <ul class="nav navbar-nav navbar-Left">
     <li>@Html.ActionLink("Manage Credentials", "Credentials", "Account", 
             routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
     <li>@Html.ActionLink("Manage Profile", "Profile", "Account", 
             routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
 </ul>
@Html.Action("MyChildAction", "Path", Model)
@Html.Action("MyChildAction", "Path", new { viewModel = Model} )