Entity Framework Edit / Delete Record работает на локальном и Azure промежуточном слоте - ошибка в работе - PullRequest
0 голосов
/ 27 февраля 2019

У меня работает веб-приложение в Azure.Я настроил Entity Framework для доступа к моей базе данных.Представления «Редактировать» и «Удалить» работают на моем локальном компьютере и при развертывании в промежуточном слоте.Когда я нажимаю на рабочий слот, я получаю ошибку.По какой-то причине Контроллер не читает в идентификаторе записи, даже если он явно передается в URL и настроен в RouteConfig.

ОБНОВЛЕНИЕ: Вот запрос.https://teamweb.azurewebsites.net/JobTracking/Edit/41ba2cca-3e6c-4920-9f2f-92f656ab4374 Я получаю 500 Ошибка.

ОБНОВЛЕНИЕ 2: Вот исключение

Заявка типа 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' или' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider' не присутствовала в предоставленном ClaimsIdentity.Чтобы включить поддержку маркеров защиты от подделки с проверкой подлинности на основе утверждений, убедитесь, что настроенный поставщик утверждений предоставляет оба эти утверждения в генерируемых им экземплярах ClaimsIdentity.Если вместо этого настроенный поставщик утверждений использует другой тип утверждения в качестве уникального идентификатора, его можно настроить, задав статическое свойство AntiForgeryConfig.UniqueClaimTypeIdentifier.ai.snapshot.version v2 ai.snapshot.id 6404b56bd53c4cd58857cc3c7bbb08f5 ai.snapshot.stampid eastus-eit7xiflzk3gi System.,Чтобы включить поддержку маркеров защиты от подделки с проверкой подлинности на основе утверждений, убедитесь, что настроенный поставщик утверждений предоставляет оба эти утверждения в генерируемых им экземплярах ClaimsIdentity.Если вместо этого настроенный поставщик утверждений использует другой тип утверждений в качестве уникального идентификатора, его можно настроить, задав статическое свойство AntiForgeryConfig.UniqueClaimTypeIdentifier.

в System.Web.Helpers.AntiXsrf.ClaimUidExtractor.GetUniqueIdentifierParameters Claim, String uniqueClaimTypeIdentifier) ​​

в System.Web.Helpers.AntiXsrf.ClaimUidExtractor.ExtractClaimUid (удостоверение IIdentity)

в System.Web.Helpers.AntiXsrf.TokenteHiteTexteteBenteTateTextTenTateTenTateTentTentTentTeteTenTateTentTeteTenTateTentTentTentTeteTenTeGTeNTTeGeTeNTTeTGTNTTeTTTTNTEFTATE), AntiForgeryToken cookieToken)

в System.Web.Helpers.AntiXsrf.AntiForgeryWorker.GetTokens (HttpContextBase httpContext, AntiForgeryToken oldCookieToken, AntiForgeryToken * newCooken * newToken 10XenTenen)AntiForgeryWorker.GetFormInputElement (HttpContextBase httpContext)

в System.Web.Helpers.AntiForgery.GetHtml ()

в System.Web.Mvc.HtmlHelper.AntiForgeryToken ()

в ASP._Page_Views_JobTracking_Edit_cshtml.Execute () в D: \ home \ site \ wwwroot \ Views \ JobTracking \ Edit.cshtml: строка 17

в System.Web.WebPages.WebPageBase.ExecutePageHierarchy ()

в System.Web.Mvc.WebViewPage.ExecutePageHierarchy ()

в System.Web.WebPages.StartPage.ExecutePageHierarchy ()

System.Web.WebPages.WebPageBase.ExecutePageHierarchy (WebPageContext pageContext, Writer TextWriter, WebPageRenderingBase startPage)

в System.Web.Mvc.ViewResultBase.ExecuteResult * контекст ControllerContext 10 * в 10 .44 * 10Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive (фильтры IList`1, Int32 filterIndex, preContext ResultExecutingContext, Контроллер Context ControlContext, ActionResult actionResult)

в фильтре Inject., ControllerContext controllerContext, ActionResult actionResult)

в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, фильтры IList`1, ActionResult actionResult)

в System.Web.Mync. Sync.<> c__DisplayClass3_1.b__1 (IAsyncResult asyncResult)

Вот код RouteConfig:

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "JobTracking/{action}/{id}",
                defaults: new { controller = "JobTracking", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Home",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
         }
    }

Вот код в контроллере

// GET: JobTracking/Edit/5
        public ActionResult Edit(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Job_Tracking job_Tracking = db.Job_Tracking.Find(id);
            if (job_Tracking == null)
            {
                return HttpNotFound();
            }
            return View(job_Tracking);
        }

1 Ответ

0 голосов
/ 27 февраля 2019

Вы должны указать AntiForgeryConfig использовать NameIdentifier следующим образом в методе Application_Start Global.asax.cs:

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;

Если вы не указалиClaimTypes.NameIdentifier тогда вы, вероятно, получите следующее сообщение об ошибке:

Заявка типа 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' не была указана в предоставленном ClaimsIdentity.

Чтобы исправить это, вы можете указать NameIdentifier, который будет лучше всего описан ниже:

var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, "username"),
    new Claim(ClaimTypes.Email, "user@email.com"),
    new Claim(ClaimTypes.NameIdentifier, "someUserId"),
};

//await UserManager.AddClaimAsync(userId, new Claim(ClaimTypes.NameIdentifier, "someUserId")); if you're using Identity's UserManager

, или если у вас есть разные уникальные данные претензии, но вы не можете указать userId, вы можете установитьUniqueClaimIdentifier к чему-то следующему (менее приемлемому):

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Email;

или вариант, который я очень настоятельно рекомендую вам избегатьбыть, чтобы удалить маркер антиподделения из вашего поля зрения.то есть: удалить @Html.AntiForgeryToken()

...