sql >> Database >  >> RDS >> Sqlserver

Waarom Asp.net MVC4 de cookieloze opslag van SQL Server Session-status niet kan gebruiken?

Er zit een fout in de Html.BeginForm() helper (degene die geen argumenten aanneemt) bij gebruik met cookieless="true" . Het houdt geen rekening met de sessie-ID bij het genereren van de url. Dus in plaats van:

<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">

het genereert:

<form action="/home/index" method="post">

Wanneer je een bericht plaatst op /home/index er wordt automatisch een omleiding gemaakt naar /(S(kkt0zgbnuaoxad23ew33iod4)) door ASP.NET. Een omleiding betekent een GET-verzoek => uw POST-actie wordt nooit bereikt.

Als tijdelijke oplossing zou je een aangepast Html.BeginForm . kunnen schrijven helper om de bug op te lossen:

public static class FormExtensions
{
    public static IDisposable MyBeginForm(this HtmlHelper htmlHelper)
    {
        var rawUrl = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
        var formAction = htmlHelper.ViewContext.HttpContext.Response.ApplyAppPathModifier("~/") + rawUrl;
        var builder = new TagBuilder("form");
        builder.MergeAttributes(new RouteValueDictionary());
        builder.MergeAttribute("action", formAction);
        builder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post), true);
        htmlHelper.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag));
        var form = new MvcForm(htmlHelper.ViewContext);
        return form;
    }
}

en gebruik dan:

@using (Html.MyBeginForm())
{
    ...
}

Wat de andere overbelastingen van de BeginForm-helper betreft, deze zouden goed moeten werken en de juiste actie moeten genereren die de sessie-ID bevat.




  1. Is dit een mogelijke bug van Oracle of mis ik iets?

  2. Problemen met GROUP_CONCAT en Longtext in MySQL

  3. Prestaties van bcp/BULK INSERT versus tabelwaardeparameters

  4. MySQL - Een kolom selecteren die niet in Group By is