Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо Asp.net MVC4 не може да използва без бисквитки на хранилището на състоянието на SQL Server Session

Има грешка в Html.BeginForm() помощник (този, който не приема никакви аргументи), когато се използва с cookieless="true" . Не взема предвид идентификатора на сесията при генериране на url. Така че вместо:

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

той генерира:

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

Когато публикувате в /home/index автоматично се прави пренасочване към /(S(kkt0zgbnuaoxad23ew33iod4)) от ASP.NET. Пренасочването означава GET заявка => действието ви POST никога няма да бъде постигнато.

Като заобиколно решение можете да напишете персонализиран Html.BeginForm помощник за коригиране на грешката:

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

и след това използвайте:

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

Що се отнася до другите претоварвания на помощника BeginForm, те трябва да работят добре и да генерират правилно действие, съдържащо идентификатора на сесията.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:клауза IF в клаузата WHERE

  2. Изпращането на имейл през SQL Server е НЕУСПЕШНО

  3. Service Broker или SqlDependency в SqlLocalDb?

  4. LIKE срещу CONTINS на SQL Server

  5. Позоваване на псевдоним другаде в списъка SELECT