我有一个在Azure中运行的Web应用程序。我设置了实体框架来访问我的数据库。“编辑”和“删除”视图在我的本地计算机上以及部署到临时插槽时工作。当我推到生产槽时,我得到一个错误。出于某种原因,控制器没有读取记录ID,即使它显然是在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类型的索赔在提供的索赔身份中不存在。若要通过基于声明的身份验证启用反伪造令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsId相实例上提供了这两种声明。如果配置的声明提供程序使用不同的声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig来配置它。ai.snapshot.versionv2ai.snapshot.id6404b56bd53c4cd58857cc3c7bbb08f5ai.snapshot.stampideastus-eit7xiflzk3gi System.无效操作异常:提供的声明身份中没有http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier或http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider类型的声明。若要通过基于声明的身份验证启用反伪造令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsId相实例上提供了这两种声明。如果配置的声明提供程序使用不同的声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig来配置它。UniqueClaimType标识符。
at System.网页。帮手。AntiXsrf.ClaimUidExtractor.GetUniqueIdfierParameters(声明身份声明身份,字符串uniqueClaimType标识符)
在系统中。网状物帮手。抗XSRF。索赔人。ExtractClaimUid(身份标识)
at System.网页。帮手。AntiXsrf.TokenValidator.GenerateFormToken(HttpContextBase http pContext,IId实体标识,AntiForgeryToken CookieToken)
在系统中。网状物帮手。抗XSRF。防霉剂工人。GetTokens(HttpContextBase httpContext,AntiForgeryToken oldCookieToken,AntiForgeryToken
在系统中。网状物帮手。抗XSRF。防霉剂工人。GetFormInputElement(HttpContextBase httpContext)
在系统中。网状物帮手。防暴药。GetHtml()
at System.网页。mvc.HtmlHelper.反伪造令牌
在ASP_页面\查看\作业跟踪\编辑\ cshtml。在D:\home\site\wwwroot\Views\JobTracking\Edit中执行()。cshtml:第17行
at System.网页。网页。网页库。层次结构
在系统中。网状物Mvc。WebViewPage。ExecutePageHierarchy()
在系统中。网状物网页。起始页。ExecutePageHierarchy()
at System.网页。网页。网页库。执行页面层次结构(WebPageContext pageContext, TextWriter作家, WebPageRenderingBase starPage)
在系统中。网状物Mvc。ViewResultBase。ExecuteSult(ControllerContext上下文)
at System.网页。mvc.Invoker.InvokeActionResultFilterRecursive(IList'1过滤器,Int32过滤器索引,ResultExecutingContext预上下文,控件上下文控制上下文,动作结果actionResult)
at System.网页。mvc.Invoker.InvokeActionResultFilterRecursive(IList'1过滤器,Int32过滤器索引,ResultExecutingContext预上下文,控件上下文控制上下文,动作结果actionResult)
在系统中。网状物Mvc。ControllerActionInvoker。InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1筛选器,ActionResult ActionResult)
at System.网页。mvc.不同步。AsyncControlllerActionInvoker.
以下是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);
}
您需要告诉AntiForgeryConfig在全局的
应用程序启动方法中使用
名称标识符
。尽快。cs
:
AntiForgeryConfig。UniqueClaimTypeIdentifier=索赔类型。名称标识符
如果您没有指定
ClaimType。Name标识符
然后您可能会在更改后收到以下错误:
类型的索赔http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier“在所提供的索赔中不存在。
要解决此问题,您可以指定一个
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,您可以将UniqueClaim标识符设置为其他内容,如下所示(不太容易接受):
AntiForgeryConfig.UniqueClaimType标识符=声明类型。电子邮件;
或者我强烈建议你远离的一个选择是从你的视野中移除防伪标志。i、 e:删除
@Html。AntiForgeryToken()
问题内容: 我正在使用EF 4 STE对附件对象进行建模。该 附件 包含了名称,描述,日期,以及最重要的数据()。为了优化加载,我不想在绝对必要之前(即当用户从客户端单击时)检索Data属性。 为了遵循这种方法,我使用了此处描述的表拆分技术。我将“ 附件” 表分为“ 附件” (“名称”,“描述”,“日期”)和“ AttachmentData” (数据)。在我的EF模型中,这是一对一的关系。一切正常
我有2个实体类(表A的实体和表B的实体)。表 A 链接到表 B。因此,实体类具有 B 实体的对象列表,并声明如下图所示。 @OneToMany(mappedBy=“AEntity”,cascade=CascadeType.REMOVE,fetch=FetchType.LAZY)private List items=new ArrayList(); 如果我使用“entityManager.remov
我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s
问题内容: 不太确定如何措辞这个问题,但是就到这里了。我正在一个项目中,其中多个客户端应用程序正在通过WCF服务访问一个数据源。可能无关紧要,但是WCF服务正在利用实体框架来访问此数据源。每当客户端查询记录以进行编辑时,我都希望在第一个客户端完成更新之前,其他客户端无法编辑该记录。 如果我错了,请纠正我,但我相信这也称为同步和异步数据访问。 我的问题是,实现此功能的行业最佳实践是什么?有没有一种方
问题内容: 我有一个在本地完美运行的Web项目。但是,当我在Azure上已发布的网站中更改连接字符串以连接到SQL Azure上的数据库时,它将开始出现此错误。 我的配置有: 我使用该连接字符串在本地使用单元测试进行了测试,并且该测试可以从连接到SQL Azure数据库的本地计算机上运行。任何帮助表示赞赏。 问题答案: 我今天遇到了这个确切的问题;这是我第一次部署到Azure。我一直在拔头发,除了
在我的项目中,我有两个实体与@OneTomany和@ManyToOne相关。看看这些照片- 我的问题-当我从供应品中删除记录时,也会从产品中删除记录,但我不会这样做。如果我删除CascadeType.All,然后重试此操作,将出现错误 com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新