Tag: asp.net mvc

可以使用MemoryStream和FileStreamResult吗?

我正在使用DotNetZip创建一个zip文件并将其传递给FileResult。 在调试时,我可以validationMemoryStream是否包含文件,但是当我通过FileStreamResult运行它时,它返回0bytes: public FileResult GetZipFiles(int documentId) { var file = fileRepository.Get(documentId); var zip = new ZipFile(); var stream = new MemoryStream(); var filePath = Path.Combine(UploadsFolder, Path.GetFileName(file.Id)); zip.AddFile(filePath); zip.Save(stream); var result = new FileStreamResult(stream, “application/zip”) { FileDownloadName = “hey.zip” }; return result; } 同样,我可以validation流不是空的,但这将始终将文件hey.zip返回为0bytes。 我必须在这里使用MemoryStream错误吗? 或者FileStreamResult做了一些我不希望它做的事情? 我之前使用过FileStreamResult ,但没有使用MemoryStream 。

使用属性路由为Web Api构建URL视图

如何在我看来从web api获取url? 示例(来自msdn-blog ): [RoutePrefix(“reviews”)] public class ReviewsController : ApiController { // eg.: /reviews [Route] public IHttpActionResult Get() { … } // eg.: /reviews/5 [Route(“{reviewId}”)] public IHttpActionResult Show(int reviewId) { … } // eg.: /reviews/5/edit [Route(“{reviewId}/edit”)] public IHttpActionResult Edit(int reviewId) { … } } 现在我想在我的视图中构建“/ reviews / edit”,我该怎么做? 我已经尝试创建一个小扩展方法,但它要求我给每个路由一个实际的“RouteName”。 有没有我可以使用的方法(比如在MVC中)我可以通过控制器和动作? @Url.Action(“Edit”, “Reviews) 我现在使用的方法(使用RouteName)也不允许我使用整数作为参数(除非我传递一个默认值)。 如果我确实需要命名我的所有路线,我如何创建路线url,但是在我的请求的“数据”部分中传递我的参数? 目前的方法: […]

一个MVC表单上的多个表单,使用循环创建,只有第一个提交数据

我有以下代码,只有第一个表单提交任何内容,以下提交null值,每个模型都有数据。 如果我将其更改为一个大表单,则所有内容都会提交。 为什么其他个人forms会发布空值? 视图 @model myModel[] @for (int i = 0; i < Model.Length; i++) { using (Html.BeginForm("controllerAction", "Controller", FormMethod.Post, new { id="Form"+i })) { @Html.TextBoxFor(a => a[i].property1) @Html.CheckBoxFor(a => a[i].property2) @Html.HiddenFor(a => a[i].property3) } } 调节器 [HttpPost] public ActionResult controllerAction(myModel[] models) { …do stuff… }

ASP.NET MVC角色和安全性

假设这是我的SampleController动作方法 public ActionResult AdminView() { return View() } 如果要登录的用户属于admin角色,则需要调用此控制器方法,否则应该阻止此方法调用,并且用户应该获得一些自定义的未经授权的访问错误页面。 在我的asp .net mvc Web应用程序中,当用户登录时,我将用户角色作为字符串存储在会话中。 每当需要validation用户角色时,我会将会话中存储的值与常量“ADMIN_ROLE”进行比较。 但是我正在编写这段代码来检查几乎每个控制器操作方法中的用户角色,然后为用户返回适当的视图,或者如果用户角色限制为控制器操作方法,则返回未授权的访问页面视图。 我用谷歌搜索并读到我们可以使用这样的东西。 [Authorize(Roles=”admin”)] public ActionResult AdminView() { return View() } 但我不确定Authorize和Roles关键字的工作原理。 如果角色与为操作方法标记的角色不匹配,那么在设置Roles =“Admin”时,如何帮助检查存储在会话中的用户角色字符串,或者如何将用户重定向到未授权的页面。

将global.asax迁移到ASP.NET 5

几天前.NET Core RC1已经发布了,我在阅读了很多关于它之后第一次试了一下,我喜欢它,但它有点不同。 我正在尝试将一个小博客(内置MVC5)迁移到MVC 6和.NET Core。 这并不难,但我真的很难重新创建我在MVC 5中完全相同的global.asax设置,ASP.NET 5不再具有global.asax所以我无法弄清楚大多数设置的替代品是什么是? protected void Application_Start() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine()); MvcHandler.DisableMvcResponseHeader = true; AntiForgeryConfig.SuppressXFrameOptionsHeader = true; BundleConfig.RegisterBundles(BundleTable.Bundles); RouteConfig.RegisterRoutes(RouteTable.Routes); } protected void Application_BeginRequest() { Response.AddHeader(“X-Frame-Options”, “DENY”); } protected void Application_EndRequest() { if (Response.StatusCode != 301 && Response.StatusCode != 302) return; var targetUrl = Response.RedirectLocation.Replace(“ReturnUrl”, “url”); Response.RedirectLocation = targetUrl; } protected […]

使用多个MvcSiteMaps

我最近遇到了试图使用MvcSiteMapProvider的路障 。 在我的申请中,我有三个不同的领域:着陆,应用和管理。 我目前已经实现了MvcSiteMapProvider,它的工作效果令人惊讶,但我现在要做的是 – 使用Html MvcSiteMap Helper并根据我所在的区域指定不同的地图提供者。 所以,当我: 在“Admin”区域中 – 我想使用名为“AdminSiteMapProvider”的提供程序。 在“应用程序”区域中 – 我想使用名为“AppSiteMapProvider”的提供程序。 我尝试过以下方法: 共享 – > _AppLayout.cshtml @Html.Partial(“_Menu”) 共享 – > _Menu.cshtml @{ if (HttpContext.Current != null && HttpContext.Current.Handler is System.Web.Mvc.MvcHandler) { var handler = HttpContext.Current.Handler as System.Web.Mvc.MvcHandler; var currentArea = handler.RequestContext.RouteData.Values[“area”] ?? string.Empty; if (!string.IsNullOrEmpty(currentArea.ToString())) { @Html.MvcSiteMap(“AppSiteMapProvider”).Menu() } else if (currentArea.ToString() […]

从自定义AdditionalMetadataAttribute访问模型类实例(asp.net mvc 5)

我有以下情况 – 我需要编写一个自定义的附加元数据属性,该属性基于另一个属性值(来自同一模型),向AdditionalValues字典添加一个值。 现在,我的问题是我无法访问属性类中的模型实例。 [AttributeUsage(AttributeTargets.Property)] public class ExtendedAdditionalMetadataAttribute : Attribute, IMetadataAware { #region Private properties private string extraFieldToCheck { get; set; } private string extraFieldValueToCheck { get; set; } private string fieldToBeAdded { get; set; } private string fieldValueToBeAdded { get; set; } #endregion #region Constructor public ExtendedAdditionalMetadataAttribute(string extraFieldToCheck, string extraFieldValueToCheck, string fieldToBeAdded, string fieldValueToBeAdded) […]

获取Enum值以显示在Dropdownlist Asp.Net MVC上

我有这样的枚举: public enum PaymentType { Self=1, Insurer=2, PrivateCompany=3 } 我在控制器中将它显示为像这样的选择框选项: List paymentTypeList = Enum.GetValues(typeof (Patient.PaymentType)).Cast().ToList(); ViewBag.PaymentType = new SelectList(paymentTypeList); 在这里我可以看到只有枚举的字符串部分(例如“Self”)才会到达前端,所以我不会在我的下拉列表中获得枚举的值(例如“1”)。 如何将文本以及枚举值传递给选择列表?

ASP.NET MVC上传图片

我找到了一些代码来实现这一点并尝试将其实现到我的项目中,但到目前为止它还没有成功。 我没有收到任何错误,但我没有看到任何图像存储在visual studio内的images目录中。 视图: @using (Html.BeginForm()) { Please enter your story here: Submit } 控制器: [HttpPost] public ActionResult Create(Testimonials testimonials) { if (Request.Files.Count > 0) { var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath(“~/Images/”), fileName); file.SaveAs(path); } } TestimonialsContext testContext = new […]

在自定义AuthorizeAttribute中访问QueryString

我正在使用Web API并设置了一个简单的身份validation和授权机制,其中调用者在查询字符串中传递我发给他们的令牌。 所以他们提交的请求如下: https://mysite.com/api/Ping?token=[issued-token] 我有一个像这样的ApiAuthorizeAttribute: public class ApiAuthorizeAttribute : System.Web.Http.AuthorizeAttribute { public ApiPermission Permission { get; set; } public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { switch (Permission) { case ApiPermission.None: return; case ApiPermission.Write: case ApiPermission.Read: string query = actionContext.Request.RequestUri.Query; var nvc = System.Web.HttpUtility.ParseQueryString(query); string token = nvc[“token”]; // (my code to map the token to an […]