天道酬勤,学无止境

asp.net-mvc

向 MVC 3 添加基于声明的授权(Adding Claims-based authorization to MVC 3)

问题 我有一个 MVC 应用程序,我想向其中添加基于声明的授权。 在不久的将来,我们将使用 ADFS2 作为联合身份,但现在我们将在本地使用表单身份验证。 有没有人看过有关在没有外部身份提供者的情况下使用 WIF 的最佳方法的教程或博客文章? 我已经看到了以下内容,但现在已经一年了,我认为应该有一个更简单的解决方案: http://geekswithblogs.net/shahed/archive/2010/02/05/137795.aspx 回答1 您可以在没有 STS 的情况下在 MVC 中使用 WIF。 我使用了默认的 MVC2 模板,但它也应该适用于 MVC 3。 你需要: 1- 插入 WIF 的SessionAuthenticationModule (web.config) < add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 2- 无论您在哪里对用户进行身份验证,都创建一个ClaimsPrincipal ,添加所有必需的声明

2021-12-05 09:25:19    分类:技术分享    asp.net-mvc   asp.net-mvc-3   wif   claims-based-identity

EF Core 3.1 是否支持 DB First 方法?(Does EF Core 3.1 support DB First approach?)

问题 我们正在将ASP.NET MVC 4.x应用程序移植到ASP.NET Core 3.1 。 当前应用程序使用EF 6.x DB 第一种方法。 作为此迁移的一部分,我们将使用EF Core 3.1作为当前EF 6.x的替代方案。 所以问题是: EF Core 3.1 是否支持 DB First 方法? 如果没有,有哪些选择? 我们是否只剩下代码优先的方法? 感谢您的帮助。 回答1 是的。 从 .NET Core 1.0 到现在,它都支持 DB First Approach。 你需要从nugets下载4 实体框架核心 EntityFrameworkCore.Design EntityFrameworkCore.Tools EntityFrameworkCore.SqlServer 打开工具 > NuGet 包管理器 > 包管理器控制台。 并在控制台中输入以下内容。 默认: Scaffold-DbContext "Server=yourserveraddress;Database=yourdatabase;user id=youruser;password=yourpassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context "YourOwnContext" 看到您关于“Scaffold

2021-12-05 09:08:58    分类:技术分享    asp.net-mvc   entity-framework   asp.net-core   entity-framework-core   porting

为什么传递对象会自动变成按引用传递?(Why passing an object automatically becomes a pass by reference?)

问题 我正在尝试在我的 AdminController 中验证管理员登录,这是我到目前为止所做的: [HttpPost] public ActionResult AdminLogin(Admin admin) { Admin newAdmin = admin; if (ModelState.IsValid) { Admin validAdmin = _iadmin.AuthenticateAdmin(admin); if(newAdmin.AdminName == validAdmin.AdminName) { ViewBag.message = "Valid"; } } return View(); } public Admin AuthenticateAdmin(Admin admin) { int count = 0; using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, conn)) { conn.Open(); command.Parameters.AddWithValue("AdminName", admin.AdminName); command.Parameters

2021-12-05 09:07:10    分类:技术分享    c#   asp.net   asp.net-mvc   reference

MVC - UTC 日期到 LocalTime(MVC - UTC date to LocalTime)

问题 我们有一个 MVC 项目,我需要显示一个转换为用户本地时间的 UTC 日期。 在我的模型中,我传递了 UTC 日期,并且在视图中我尝试执行以下操作: <%: Html.DisplayFor(m=> m.SomeDate.ToLocalTime()) %> 这会引发异常。 任何人都可以指出我如何将 UTC 日期转换为本地日期时间以在客户端显示的正确方向。 我们将日期存储为 UTC,并在显示时间将这些日期转换为本地机器等价物。 回答1 DateTime now = DateTime.UtcNow; DateTime localNow = TimeZoneInfo.ConvertTimeFromUtc(now, TimeZoneInfo.Local); 回答2 您将需要存储用户时区服务器端,然后使用这样的东西(虽然它应该在控制器中完成,而不是在视图中): @TimeZoneInfo.ConvertTimeFromUtc(Model.CreatedOn, TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time")) 回答3 您不能在服务器上执行 ToLocalTime(),因为服务器采用 UTC。 您要么需要: 让客户端以某种方式发送它的时区(这可能很棘手,因为默认情况下您不会通过 GET 请求获取它)

2021-12-05 08:42:57    分类:技术分享    asp.net-mvc   date

在 iframe 中使用 RedirectToAction 后,ASP.NET MVC 会话被重置(ASP.NET MVC Session gets reset after using RedirectToAction within iframe)

问题 我有一个 ASP.NET MVC 应用程序(比如 App_A)和另一个 ASP.NET 应用程序(比如 App_B)。 App_B 有一个在其中加载 App_A 的 iframe。 App_B 上的代码如下所示: iframe.Attributes["src"] = frameURL; 其中 frameURL 是一个变量,包含指向 App_A 的链接。 当 iframe 加载 URL 并调用 App_A 上的index()方法时,我在会话Session["CartID"] = 373895设置一个值,并且我正在使用RedirectToAction("Shipping") 。 但是在Shipping()操作方法中,会话似乎是null 。 设置会话变量和调用RedirectToAction()的代码位于 iframe 中。 我之前在 Safari 浏览器上遇到的类似问题: 这在过去的 2 年里一直运行良好,没有任何问题。 以前,我只在 Safari 浏览器上遇到 CORS 问题。 由于父窗口和 iframe 上的网站来自不同的域,我无法在重定向后在 iframe 中保留会话值,因为它正在重置。 要在 Safari 上解决此问题,我必须在父窗口上加载 iframe 站点 (App_A),设置 cookie,然后重定向回父网站并再次在 iframe 中加载 App_A。

2021-12-05 08:38:00    分类:技术分享    c#   asp.net   asp.net-mvc   session

ASP.NET MVC 控制器动作设计(ASP.NET MVC controller actions design)

问题 我真的很喜欢 ASP.NET MVC 的工作方式。 我很想在所有新的 web 项目中实现它,但前几天我在原型中遇到了一个障碍,我真的没有找到一个好的解决方案,所以我问你,你会如何设计一个 MVC 应用程序这不符合典型的 REST 模式? 例如,我正在设计的原型会有多个页面,但页面本身不一定绑定到域模型。 以一个简单的注册站点为例,它可能有以下页面: /默认.aspx /注册.aspx /谢谢你.aspx 有时,此类程序可能需要管理部分来处理诸如审核注册或查看数据之类的详细信息。 在标准的 ASP.NET Web 应用程序中,我可能会添加以下内容 /Admin/Default.aspx /Admin/ListRegistrations.aspx /Admin/ViewReports.aspx ... 在这种情况下,拥有两个控制器,例如: 首页->索引首页->注册首页->谢谢管理->索引 Admin->ListRegistrations 管理->报告 我对此感到沮丧的是,还没有真正可靠的子控制器和区域实现。 我知道 Phil Haack 组装的“Areas”原型,但它不是很成熟,坦率地说,我不确定我喜欢它的设置方式,但我真的不知道我喜欢看看那个作品。 我想当我想到 MVC 时,我也倾向于认为 REST,并且拥有代表页面而不是实际实体或动作的控制器动作并不适合我。 你怎么认为?

2021-12-05 08:33:34    分类:技术分享    asp.net-mvc   model-view-controller   rest

asp.net mvc中嵌套属性的模型绑定(Model binding of nested properties in asp.net mvc)

问题 我想让一些绑定在我的 mvc 应用程序中工作。 我发现嵌套属性不会被 asp.net mvc 的 RC1 版本中的默认模型绑定器自动绑定。 我有以下类结构: public class Contact{ public int Id { get; set; } public Name Name { get; set; } public string Email { get; set; } } 其中Name定义为: public class Name{ public string Forename { get; set; } public string Surname { get; set; } } 我的观点是按照以下方式定义的: using(Html.BeginForm()){ Html.Textbox("Name.Forename", Model.Name.Forename); Html.Textbox("Name.Surname", Model.Name.Surname); Html.Textbox("Email", Model.Email); Html.SubmitButton("save", "Save"); } 我的控制器操作定义为: public ActionResult Save(int id, FormCollection submittedValues){

2021-12-05 08:28:02    分类:技术分享    asp.net-mvc

Html.Textbox VS Html.TextboxFor(Html.Textbox VS Html.TextboxFor)

问题 Html.Textbox 和 Html.TextboxFor 有什么区别? 回答1 最终,它们都生成相同的 HTML,但 Html.TextBoxFor() 是强类型的,而 Html.TextBox 不是。 1: @Html.TextBox("Name") 2: Html.TextBoxFor(m => m.Name) 都会产生 <input id="Name" name="Name" type="text" /> 那么这在使用方面意味着什么呢? 一般有两点: 键入的TextBoxFor将为您生成输入名称。 这通常只是属性名称,但对于复杂类型的属性可以包含下划线,例如“customer_name” 使用类型化的TextBoxFor版本将允许您使用编译时检查。 因此,如果您更改模型,则可以检查视图中是否有任何错误。 通常认为使用 MVC2 中添加的 HtmlHelpers 的强类型版本是更好的做法。 回答2 TextBoxFor是 MVC2 中引入的较新的 MVC 输入扩展。 较新的强类型扩展的主要好处是在编译时而不是运行时显示任何错误/警告。 请参阅此页面。 http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx 回答3 IMO

2021-12-05 07:58:16    分类:技术分享    asp.net-mvc   asp.net-mvc-3   razor

asp.net mvc 中的 Html.TextAreaFor(Html.TextAreaFor in asp.net mvc)

问题 我有一个 asp.net mvc 视图,它允许用户在 textarea 中输入一些描述。 我面临两个问题。 当我扩展 textarea 时,它会在不移动其他 html 元素的情况下扩展,或者我无法创建 Html.TextBoxFor () 多行文本框。 任何人都可以提出解决方案吗? 如果使用 Textarea 如何使其扩展(增大大小),使其不与其他元素重叠或如何使用 Html.TextBoxFor() 进行多行? 这是我的代码的样子 <% using (Html.BeginForm()) { %> <%: Html.ValidationSummary(true)%> <fieldset> <div class="editor-label1"> <%: Html.LabelFor(Model => Model.PackageID)%> </div> <div class ="editor-field1"> <%: Html.HiddenFor(Model => Model.PackageID)%> <%: Html.DisplayFor(Model => Model.PackageID)%> <%: Html.ValidationMessageFor(Model => Model.PackageID)%> </div> <div class="editor-label1"> <

2021-12-05 07:46:18    分类:技术分享    asp.net-mvc   textarea   html-helper

使用实体框架的模型上的显示名称(DisplayName on Model that use Entity Framework)

问题 我有一个看起来像这样的代码: public class MyModel { [Required] [Display(Name = "labelForName", ResourceType = typeof(Resources.Resources))] public string name{ get; set; } } 问题是实体框架生成的模型类中增加了属性Display和Required。 我知道我可以使用 Partial 添加功能,但是如何将属性添加到将使用 ORM 擦除和更新的类? 回答1 根据我的经验,数据库中的模型很少与网页中使用的模型相同。 你总是需要某种改变。 因此使用ViewModel s。 另一个好处是,如果实体模型发生更改,所有使用您的 ViewModel 的网页都不会中断。 至于安全性,如果您有一个public ActionResult Save(MyEntityModel model)可能会导致安全漏洞,因为用户可能会想出如何将值发布到不应更改的属性(如Role 、 Status 、 IsAdmin或其他)。 让自己熟悉映射器(如自动映射器),并将属性放在 ViewModel 上。 回答2 您是否考虑过使用 T4 模板来修改生成的代码。 http://www.hanselman.com/blog

2021-12-05 07:43:49    分类:技术分享    c#   asp.net   asp.net-mvc   asp.net-mvc-3