服务层(.NET应用程序)中的授权和用户信息

我目前正在使用.NET环境中的企业应用程序(n-layered),我想知道在BussinessLayer(BL)中管理身份validation/授权+数据过滤的最佳方法。 我们将使用来自多个接口(ASP.NET应用程序和Web服务)的BL,我认为我的ServiceLayer应该完成这项工作,但我找不到最好的方法。 我想它可能是这样的:(1)用户可能使用FormsAuthentication进行身份validation(ASP.NET Web客户端)。 (2)ASP .NET代码(Controller / CodeBehind)实例化服务以完成一些用户案例,以某种方式传递“用户”。 (3)服务方法检查“用户”是否存在(认证)和他的角色(授权)以validation他是否可以调用该方法。 如果未经过身份validation或授权,则会引发exception。 (4)服务使用存储库+其他服务+完成工作所需的任何服务。 如果需要某种细粒度过滤(例如,用户仅对某些项目具有权限),则服务会自动应用它。 我想要的是将ServiceLayer与’web stuff’隔离(不访问会话…),但是谁知道User调用其方法来正确操作。 此外,我不知道如何以良好的方式将该工作与ASP .NET身份validation相匹配……我正在考虑在服务ctor中总结“用户”,以便其方法具有所需的“上下文”,可以那工作?…我会很感激一些迹象或现有的代码片段。 谢谢您的帮助…

MVC3 RedirectToAction在post方法和ViewBag抑制中

我目前正在处理一个数据列表,我需要在一个视图中显示一个列表,并为每个项目显示可以执行的相应操作,例如编辑或删除它们。 对于版本,没有任何问题,这是一个特殊的观点。 我的问题是当我想删除一个项目时,我在post方法中有两个选择。 //Call directly the list [HttpPost] [Authorize] public ActionResult Delete(int itemId) { // logic to delete an item ViewBag.Error = “”; // The result of the execution return List(); } 这个解决方案的问题是url不再与第一个相同:… / List,它是… /现在删除,我发现这个解决方案不太好,另一个解决方案是重定向到动作,现在url很好,但viewBag中的错误信息不再可见,你们有更好的主意吗?

Mono.Cecil是否负责分支机构等位置?

那么这个问题可能看起来很奇怪,但很简单 – 我的观点是,如果我在反编译代码中有一个“goto”(brtrue等),例如 br IL_0003 call ***** IL_0003: ret 然后我在****调用之后添加一个命令,将顶点处的br恢复为应该或该代码。 塞西尔是单独做的还是我必须照顾所有这些分支? :/它不是很难修复它们但是如果Cecil没有那么我根本就不会启动这个项目,我没有时间(或知识)获得高级IL魔法:P (是的我知道它不会是IL_0003只是例如)

将零值格式化为空字符串?

我第一次涉足WPF字符串格式时遇到了困难。 我希望能够在基础值为零时使用空字符串格式化数据网格中的文本框列,并将所有其他值格式化为0.000。 但是,我的XAML似乎不能胜任工作,因为它显示所有值的空白而不仅仅是零: 我正在使用此处所述的分号运算符,并在第二个分号后添加了一个空格以获取空字符串。 非常感谢! 更新 这样做的诀窍:

将dataview排序为数据表

我有以下方法: private DataTable getsortedtable(DataTable dt) { dt.DefaultView.Sort = “Name desc”; //I would need to return the datatable sorted. } 我的问题是我无法更改此方法的返回类型,我必须返回一个DataTable,但我想将它返回排序。 是否有dt.DefaultView的魔法隐藏属性返回dt排序? 非常感谢提前。 最好的祝福。

调试UnhandledException事件时,为什么Visual Studio会循环

(这看起来非常类似于来自另一个线程的C#UnhandledException保持循环 ,但我没有尝试在这里捕获exception,只是有机会记录一些东西) 我有一些非常简单的C#代码设置UnhandledException事件处理程序,然后抛出exception: class Program { static void Main(string[] args) { AppDomain currentDomain = AppDomain.CurrentDomain; //currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); currentDomain.UnhandledException += (sender, eventArgs) => { var exception = (Exception) eventArgs.ExceptionObject; Console.WriteLine(“Unhandled exception: ” + exception.Message); }; throw new AccessViolationException(“Bleurgh”); } } 它的行为与我期望从控制台一样: Unhandled exception: Bleurgh Unhandled Exception: System.AccessViolationException: Bleurgh at UnhandledExceptions.Program.Main(String[] args) in c:\code\sandbox\UnhandledExceptions\UnhandledExceptions\Program.cs:line 20 […]

测试两个IEnumerable 是否具有相同频率的相同值

我有两个多字节,都是IEnumerables,我想比较它们。 string[] names1 = { “tom”, “dick”, “harry” }; string[] names2 = { “tom”, “dick”, “harry”, “harry”}; string[] names3 = { “tom”, “dick”, “harry”, “sally” }; string[] names4 = { “dick”, “harry”, “tom” }; 希望names1 == names4返回true(并且self == self显然返回true) 但所有其他组合都返回错误。 什么是最有效的方式? 这些可以是大型复杂对象。 我看着做: var a = name1.orderby(v => v.Name); var b = name4.orderby(v => v.Name); […]

Web API路由 – 找到了与请求匹配的多个操作

我有这条路线: routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { id = UrlParameter.Optional } ); 这个动作: [System.Web.Http.HttpPost] [System.Web.Http.ActionName(“GetLoginSeed”)] public object GetLoginSeed() [System.Web.Http.HttpPost] [System.Web.Http.AllowAnonymous] [System.Web.Http.ActionName(“Authenticate”)] public object PerformLogin(JObject jr) 这是post请求: http://localhost:61971/api/Login/GetLoginSeed 为什么我总是得到多个匹配请求错误的操作?

.NET GridView – 你能正确对齐一列吗?

你能轻松地在GridView中右对齐一列吗? 我有这个 它绑定到具有许多列的DataTable(动态生成)。 我只想让“价格”栏右对齐。 (遇到这个问题,我想知道我是否应该打印HTML 而不是使用GridView。使用HTML我会完全控制。)

Web应用程序中的LinqToSql静态DataContext

在我遇到的Web应用程序中,我发现以下代码在处理LinqToSQL时处理DataContext public partial class DbDataContext { public static DbDataContext DB { get { if (HttpContext.Current.Items[“DB”] == null) HttpContext.Current.Items[“DB”] = new DbDataContext(); return (DbDataContext)HttpContext.Current.Items[“DB”]; } } } 然后在以后执行此操作: DbDataContext.DB.Accounts.Single(a => a.accountId == accountId).guid = newGuid; DbDataContext.DB.SubmitChanges(); 在处理LinqToSQL时,我一直在研究最佳实践。 我不确定在处理DataContext不是ThreadSafe并保留它的静态副本时,这个方法已采取的方法。 这是一个很好的方法来接受Web应用程序吗? @ Longhorn213 – 基于你所说的内容,我读到的HttpContext就越多,我认为你是对的。 但是在我inheritance的应用程序中,这让人感到困惑,因为在每个方法的开头,他们都在重新查询数据库以获取信息,然后修改datacontext的实例并在其上提交更改。 从这一点来看,我认为应该不鼓励使用这种方法,因为它给人的错误印象是datacontext是静态的并且在请求之间保持不变。 如果未来的开发人员认为在方法开始时重新查询数据是因为他们认为数据已经存在,那么他们可能遇到问题而不理解原因。 所以我想我的问题是,如果在未来的发展中不鼓励这种方法吗?