sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor Asp.net MVC4 ikke kan bruge den cookiefrie SQL Server Session-tilstandslagring

Der er en fejl i Html.BeginForm() hjælper (den, der ikke tager nogen argumenter), når den bruges sammen med cookieless="true" . Den tager ikke højde for sessions-id'et, når url'en genereres. Så i stedet for:

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

det genererer:

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

Når du sender til /home/index en omdirigering foretages automatisk til /(S(kkt0zgbnuaoxad23ew33iod4)) af ASP.NET. En omdirigering betyder en GET-anmodning => din POST-handling vil aldrig blive ramt.

Som en løsning kan du skrive en brugerdefineret Html.BeginForm hjælper til at rette fejlen:

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;
    }
}

og brug derefter:

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

Hvad angår de andre overbelastninger af BeginForm-hjælperen, burde de fungere fint og generere korrekt handling indeholdende sessions-id'et.




  1. Sådan går du gennem et mysql-resultatsæt

  2. Hvordan opdeles streng og indsætte den som ny linje i samme tabel?

  3. ORA-00932:inkonsistente datatyper:forventet - fik -

  4. Håndtering af NULL-værdierne effektivt med SQL COALESCE-funktionen for begyndere