如何在单独的程序集中获取用户标识

我正在开发一个有两个项目的应用程序: 核心 – 使用存储库模式和域驱动设计来容纳数据访问层 UI – 使用ASP.Net MVC。 目前,我能够通过User属性在UI控制器内获取当前登录用户的信息(id,name等),如下所示: using Microsoft.AspNet.Identity; public class ExamController : Controller { IExaminationRepository _repository; public ExamController() { _repository = RepositoryFactory.Get(); } [HttpPost] [Authorize(Roles = “Examiner”)] public ActionResult Create(ExamViewModel viewModel) { try { ExaminationDomain domain = Mapper.Map(viewModel); //TODO: Move this to the repository domain.AuthorId = User.Identity.GetUserId(); _repository.Add(domain); return RedirectToAction(“Index”); } catch […]

使用多个参数WITHOUT DataContract来使用WCF REST服务

我需要使用POST方法使用多个参数调用我的WCF REST服务,但是我无法创建包含我的参数的DataContract,因为我需要简单的类型:我的webservice将由目标C应用程序使用。 我在MSDN网站上找到了这种语法: [OperationContract] [WebInvoke(Method = “POST”, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = “savejson?id={id}&fichier={fichier}”)] bool SaveJSONData(string id, string fichier); 为了快速解释上下文,我必须调用此方法来保存带有在数据库上传递的Id的JSON文件。 我的问题是:是否真的可以将几个参数传递给POST方法,如前所示? 其次:如何使用多个参数来使用我的服务(暂时使用C#,只是为了测试它)? 我已经使用DataContract进行了测试,我就是这样做的: string url = “http://localhost:62240/iECVService.svc/savejson”; WebClient webClient = new WebClient(); webClient.Headers[“Content-type”] = “application/json; charset=utf-8”; RequestData reqData = new RequestData { IdFichier = “15”, Fichier = System.IO.File.ReadAllText(@”C:\Dev\iECV\iECVMvcApplication\Content\fichier.json”) }; MemoryStream […]

使用C#截取任何外部应用程序

我们有一个C#(WPF)应用程序,我们想在其中截取我们发布的任意应用程序的截图(即我们引用了我们开始的流程)。 应用程序可以最小化或在其他窗口后面,但我们仍然只想要单个应用程序的图像,而不是重叠的像素。 我知道使用BitBlt或PrintWindow的典型P / Invoke解决方案大部分时间都可以工作,但是当处理直接绘制到图形设备的DirectX或OpenGL应用程序时,这些解决方案会失败(我只会得到黑/透明像素)。 我发现这篇文章是关于从C#截取Direct3D应用程序的截图,所以我想我已经涵盖了这个案例。 所以我的问题是: 我如何为OpenGL应用程序执行此操作? 确定适当使用方法(PW / DX / GL)的最简单方法是什么? 有没有一种通用的方法来做到这一点? 对于#2,我是否会降级检查可执行文件加载的模块,看看是否加载了DirectX或OpenGL DLL / Assembly? 这只需要在Windows XP上运行(不是跨平台,如果有的话,不会很快转到Vista / 7)。

C# – 使用inheritance和运算符重载设计类

我有两个类代表一种特殊的数值。 我们称之为“价值”和“分数”; 分数由Value类型的分子和分母组成。 因为这些是数值,所以运算符重载(+ – * /)很有意义。 鉴于价值的本质,除法返回一个分数。 可以使用值和分数的混合来执行操作。 目前,我刚刚定义了一个从Value to Fraction的隐式转换运算符(以及从Fraction到Value的显式运算符,虽然我没有使用它),并且我没有使用任何类型的inheritance。 我想知道是否有任何“优雅”的方式来定义两个定义可用操作集的抽象基类,并调用适当的操作。 效率是一个问题。 我宁愿在必要时仅使用Fraction,而且当它们可以使用相同的语法表达时,不必分别为这两种情况定义更复杂的操作。 我可以看到的一种方法是为每个操作执行以下操作,但我想知道是否有更好的方法来执行此操作? public static AbstractValue operator *(AbstractValue a, AbstractValue b) { Value valA = a as Value; Value valB = b as Value; if(valA == null) { Fraction fractA = a as Fraction; if(valB == null) { Fraction fractB = b […]

TcpClient的NetworkStream何时完成一次读操作?

我正在开发一个涉及通过TCP和Google协议缓冲区进行客户端服务器通信的项目。 在客户端,我基本上使用NetworkStream.Read()通过字节数组缓冲区从服务器进行阻塞读取。 根据MSDN文档, 此方法将数据读入buffer参数并返回成功读取的字节数。 如果没有可用于读取的数据,则Read方法返回0. Read操作读取尽可能多的数据,最多为size参数指定的字节数。 如果远程主机关闭连接,并且已收到所有可用数据,则Read方法立即完成并返回零字节。 与异步读取(NetworkStream.BeginRead和EndRead)的情况相同。 我的问题是Read()/ EndRead()何时返回? 看起来它会在填充缓冲区中的所有字节后返回。 但在我自己的测试中,情况并非如此。 在一次操作中读取的字节变化很大。 我认为这是有道理的,因为如果在发送消息时服务器端有暂停,客户端不应该等到读取缓冲区已经填满。 Read()/ EndRead()本身是否有一些超时机制? 我试图找出Mono如何在NetworkStream中实现Read()并跟踪,直到调用extern方法Receive_internal()。

OpCodes.Castclass。 有必要吗?

当你准备调用带有类型参数的方法时,当你在堆栈顶部引用(B)的实例时,是否需要发出OpCode.CastClass(typeof(A)),其中B是类,派生自A一个? 加成: interface IFoo { void IFoo(); } public class A:IFoo { public void IFoo() { } } public class B:A,IFoo { new public void IFoo() { } } var b = new B(); (b as IFoo).Foo(); ((b as A) as IFoo).Foo();

C#Web API基于GET请求的XML或JSON

我的config.Routes设置为: config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); 有了这个,我可以使用: localhost:port/api/products – 获取完整的产品列表 localhost:port/api/products/# – 获取具有给定id的单个产品 基于浏览器,我得到了不同的格式(默认情况下,FireFox和Google Chrome中的XML格式以及Internet Explorer中的JSON格式)。 我主要需要JSON,所以最初我添加了: var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; config.Formatters.Remove(config.Formatters.XmlFormatter); 所以我的回答总是在JSON中。 在这一点上,一切都是有意义的,我在上面提到的两个GET请求上获得了JSON格式的响应。 然后我偶然发现了这个stackoverflowpost 。 认为根据GET请求为您自己选择要返回的格式是一个很好的function。 但是,当我替换上面提到的config.Routes和JSON-only代码时: config.Routes.MapHttpRoute( name: “API UriPathExtentsion”, routeTemplate: “api/{controller}.{ext}/{id}”, defaults: new { id = RouteParameter.Optional, ext = RouteParameter.Optional } […]

MVC到Azure Active Directory签署回复“错误请求”和消息“无法创建以从中获取配置”

我究竟做错了什么? 我正在尝试从示例MVC应用程序登录Azure Active Directory并获取“错误请求”。 我在这里关注这个例子(2015年7月17日): azure.microsoft.com的例子 以下是其他人对同一数据的逐步详细说明: 博客作者扩展了azure示例 我用下面的“myActiveDirectory”替换了我的活动目录的名称。 这是我的webconfig数据: <add key="ida:AppKey" value="” /> <add key="ida:ClientId" value="d2bfc007–9f” /> AccountController.cs using System.Web; using System.Web.Mvc; // OWIN using Microsoft.Owin.Security; using Microsoft.Owin.Security.OpenIdConnect; using Microsoft.Owin.Security.Cookies; namespace TodoListWebApp.Controllers { public class AccountController : Controller { public void SignIn() { // Sends an OpenID sign-in request. if (!Request.IsAuthenticated) { HttpContext.GetOwinContext(). Authentication.Challenge(new […]

在此上下文中仅支持实体类型,枚举类型或基元类型

我目前正在搜索搜索页面。 我只需要返回包含存储在int [] ST中的所有主题标签id的主题的themedetails列表。 目前该行(ST == null?true:ST.Contains(b.ThemeTagID))似乎给我一个错误 附加信息:无法创建类型为“System.Int32 []”的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 public ActionResult Index(int ProviderID = 0, string Description = null, int[] ST = null) { var themedetail = from t in db.ThemeDetail from b in t.ThemeTags where ( (string.IsNullOrEmpty(Description) ? true : t.Description.ToLower().Contains(Description.ToLower())) && (ProviderID == 0 ? true : t.ProviderID == ProviderID) && (ST […]

使用SHFILEINFO获取文件图标

我一直在搜索ac#library,它获取了许多大小的给定路径的图标,最后当我得到我需要的类时,它有一个问题: 此方法获取给定路径的图标: public static BitmapSource GetIcon(string FileName, bool small, bool checkDisk, bool addOverlay) { SHFILEINFO shinfo = new SHFILEINFO(); uint SHGFI_USEFILEATTRIBUTES = 0x000000010; uint SHGFI_LINKOVERLAY = 0x000008000; uint flags; if (small) { flags = SHGFI_ICON | SHGFI_SMALLICON; } else { flags = SHGFI_ICON | SHGFI_LARGEICON; } if (!checkDisk) flags |= SHGFI_USEFILEATTRIBUTES; if (addOverlay) flags |= […]