Articles of asp.net mvc 4

Url.Link无法在WebAPI中使用

使用下面的unit testing..我试图测试我的webapi。 [Test] public void CheckControllerForCreate() { var config = new HttpConfiguration(); config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; var request = new HttpRequestMessage(HttpMethod.Post, “http://localhost/api/product”); var route = config.Routes.MapHttpRoute(“Foo”, “api/{controller}/{id}”); var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { “controller”, “products” } }); var controller = new ProductController { ControllerContext = new HttpControllerContext(config, routeData, request), Request = request, Url […]

在数据库中存储大型文件会导致类型为“System.OutOfMemoryException”的exception

我已经构建了一个小型MVC4网站,用于使用代码优先方法共享文件。 这些文件存储在我的数据库中 public byte[] Content { get; set; } 我设定了 和 要将文件大小限制为500 Mb,以便文件实际上将其放入我的代码中(先将其置于此位置)。 当我收到文件并尝试将其保存到数据库时,实际问题就出现了,我称之为: DbContext.SaveChanges() 并得到此错误: System.Data.Entity.dll中出现“System.OutOfMemoryException”类型的exception,但未在用户代码中处理 我猜这是因为我在数据库中的byte []中存储了多少数据(或者我的进程允许使用多少内存),因此我遇到了某种限制。在上传较小的文件时,一切都有效。 数据库服务器是SQL 2008 R2 Standard服务器。 为了简单起见,我宁愿避免将文件存储在磁盘上。我的选择是什么? 编辑:使用直接SQL查询插入文件的建议让我超过了将文件导入数据库的第一个问题: DbContext.Database.ExecuteSqlCommand( @”UPDATE FileContents SET Content = @data WHERE ID = @id”, new SqlParameter(“id”, content.ID), new SqlParameter(“data”, bytearray)); 但是,当我尝试将文件从数据库中取出时,我现在得到完全相同的错误。 这会导致错误: byte[] respdata = DbContext.Database.SqlQuery (“SELECT TOP 1 Content FROM FileContents WHERE […]

ASP MVC4 – 通过视图模型查看通过列表

我有一个模范人物(其中包括出生当天的其他字段),我想将所有人的列表以及每个人的计算年龄传递给视图 为此: 视图模型 public class vm_PersonList { public Person Person { get; set; } public int age { get; set; } } 控制器动作: public ActionResult PersonList() { ViewBag.Message = “My List”; var list = new List(); var list_p = new vm_PersonList(); foreach (var p in db.Person) { list_p.Person = p; //the age will be calculated […]

在单独的线程中执行Action以取消阻止UI

我有一个用于生成报告的表单。 我们正在使用RDLC报告,报告加载到aspx页面中。 因此,这是Form的代码,表单目标设置为_blank ,并在新选项卡中打开。 @using (Html.BeginForm(“AssetReports”, “AssetReports”, FormMethod.Post, new { target = “_blank” })) { } 这是Controller操作,它重定向到Report aspx页面,处理和显示报告。 [HttpPost] public void AssetReports(AssetReportsDTO model, AssetReportParametersDTO reportParameters) { SessionHandler.AssetReport = model; SessionHandler.AssetReportParameters = reportParameters; switch (model.SelectedReportType) { case AssetReportTypesEnum.ExcessiveIdleReport: Response.Redirect(“~/Reports/AssetReports/ExcessiveIdleReport/ExcessiveIdleReport.aspx”); break; } } 在某些情况下,报告需要3,4分钟才能生成。 在此期间,UI被阻止, 我们希望报告在单独的线程上生成,以便用户可以在生成报告时使用UI。 在MVC C#中是否有办法在单独的线程中执行此操作? 我已尝试使用以下内容,但Context和Session NULL Task.Factory.StartNew(() => { switch (model.SelectedReportType) { case […]

SignalR:如何在页面重新加载时停止创建新连接

您好我正在开发一个聊天应用程序以及我的应用程序中的其他一些页面。 一旦我登录,我正在维护用户的会话。 我的主要目的是每当另一个用户连接到服务器时,用户应该收到通知。 我面临的问题是每当我导航到我的应用程序中的某个其他页面时,连接就会丢失。 如何停止此行为并继续连接,直到用户注销。 我在ASP.NET MVC4项目中使用SignalR 2.0,任何帮助??

无法使用linq lambda表达式转换’System.Data.Entity.Infrastructure.DbQuery`1 ‘类型的对象

我是mvc的新手并试图了解我做错了什么我创建了一个Dbcontaxt类 public class DataBaseContext : DbContext { public DataBaseContext() : base(“DefaultConnection”) { } public DbSet Membership { get; set; } public DbSet OAuthMembership { get; set; } public DbSet Roles { get; set; } public DbSet UserProfiles { get; set; } public DbSet Categorys { get; set; } public DbSet SubCategorys { get; set; } […]

返回自定义错误

我设计了一个名为ErrorController的Controller,其方法有Forbidden或NotFound ,所以我可以在Web.config中添加以下几行: 所以现在我希望能够做到这样的事情: public ActionResult Edit(int idObject) { if( user.OnwsObject(idObject) ) { // lets edit } else { // ** SEND AN ERROR 403 *** // And let ASP.NET MVC with IIS manage that error to send // the requester to the Web.config defined error page. } } 问题是我尝试过这样的事情:(A) throw new HttpException(403, “Error description”); :导致Unhandledexception导致系统崩溃,(B) […]

如何初始化我的entity framework查询以加快它们的速度?

我有一个登录页面,执行一个非常简单的EF查询来确定用户是否有效。 在第一次运行时,此查询大约需要6秒才能运行。 在后续运行中,它需要不到一秒钟。 我看过一篇讨论使用Application Auto-Start的文章,我的问题是这样的:有没有办法触发这个查询,导致任何缓存需要发生而不实际调用查询,或者我是否有必要用一组伪参数调用查询? 编辑:当我说六秒钟时,我指的是获取查询所需的时间。 代码看起来像这样(注意,在这种情况下,contactID是一个可以为null的int并设置为null): return from contact in _context.Contacts where contact.District == Environment.District && contact.ContactId == (contactID ?? contact.ContactId) select contact; 这是一个SqlServer 2008,我运行一个分析器来检查SQL,它返回的持续时间是41ms,最终执行的查询。 6或7秒延迟发生在查询甚至到达SQL之前。 我现在正试着设置一下,看看它是否可以给我更多关于同时可能发生的其他事情的细节。

何时调用SaveChanges

假设我在Controller调用了类似的东西: using (var context = new SqlContext()) { context.Items.Add(new Item(“item1”)); } 我应该调用context.SaveChanges(); ?

基于声明的表单身份validation角色

我正在尝试使用MVC 4中的表单身份validation对用户进行身份validation(我使用的是RavenDB,因此我无法使用标准成员资格提供程序)。 然后,我使用User.IsInRole()方法或AuthorizeAttribute来validation用户是否处于职员角色。 这是我在成功validation时设置票证的位置(目前在UserController.cs ): FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, model.Email, DateTime.Now, DateTime.Now.AddDays(1), false, model.Email); string hashedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie( FormsAuthentication.FormsCookieName, hashedTicket); HttpContext.Response.Cookies.Add(cookie); 这是我检查每个请求的票证( Global.asax ): protected void Application_AuthenticateRequest(object sender, EventArgs e) { var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie != null) { var authTicket = FormsAuthentication.Decrypt(authCookie.Value); var user = this.UserService.GetUserByEmail(authTicket.Name); […]