Tag: asp.net web api

如何在ASP MVC中下载由NPOI生成的xls文件

我找到了如何将Excel电子表格流回客户端但在aspx代码中的例子。 代码如下 using (var exportData = new MemoryStream()) { workbook.Write(exportData); string saveAsFileName = string.Format(“MembershipExport-{0:d}.xls”, DateTime.Now).Replace(“/”, “-“); Response.ContentType = “application/vnd.ms-excel”; Response.AddHeader(“Content-Disposition”, string.Format(“attachment;filename={0}”, saveAsFileName)); Response.Clear(); Response.BinaryWrite(exportData.GetBuffer()); Response.End(); } 我正在使用asp MVC 5和webApi Controller。 我想将此代码迁移到返回HttpResponseMessage的WebApiController。 有什么好主意吗?

自定义MultipartFormDataStreamProvider上传后,通过WebApi从SQL下载大文件

这是我之前提出的一个问题的后续问题,该问题由于过于宽泛而被关闭。 上一个问题 在那个问题中,我解释说我需要通过将块存储为单独的行来将大文件(1-3GB)上传到数据库。 我通过重写MultipartFormDataStreamProvider.GetStream方法来做到这一点。 该方法返回了一个自定义流,它将缓冲的块写入数据库。 问题是重写的GetStream方法是将整个请求写入数据库(包括头文件)。 它在保持内存级别平稳的情况下成功写入数据,但是当我下载文件时,除了文件内容之外,它还会返回下载文件内容中的所有标题信息,因此无法打开文件。 有没有办法在重写的GetStream方法中,只需将文件的内容写入数据库而无需编写标题? API [HttpPost] [Route(“file”)] [ValidateMimeMultipartContentFilter] public Task PostFormData() { var provider = new CustomMultipartFormDataStreamProvider(); // Read the form data and return an async task. var task = Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) { Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); } return Request.CreateResponse(HttpStatusCode.OK); }); return task; } [HttpGet] [Route(“file/{id}”)] public async […]

如何在MVC4 RC WebApi中注册自定义模型绑定器

我最近从MVC4 beta更新到RC,并遇到了一个WebApi项目的小问题。 我注意到的第一件事就是删除了ServiceResolver。 在删除之前,我使用它以下列方式注册自定义模型绑定程序提供程序: IEnumerable modelBinderProviderServices = GlobalConfiguration.Configuration.ServiceResolver.GetServices(typeof(ModelBinderProvider)); List services = new List(modelBinderProviderServices) { new CustomDynamicObjectModelBinderProvider() }; GlobalConfiguration.Configuration.ServiceResolver.SetServices(typeof(ModelBinderProvider), services.ToArray()); 利用此模型绑定程序提供程序的操作具有以下签名: [HttpPut] public void Put(CustomDynamicObject model) 我尝试用以下代码替换旧代码,但没有结果: GlobalConfiguration.Configuration.Services.Add(typeof(ModelBinderProvider), new CustomDynamicObjectModelBinderProvider()); 当我尝试将数据PUT到给定的操作时,不调用模型提供程序的GetBinder方法,并且模型参数设置为null。 通过将Acion /方法的签名更改为以下内容,我能够使用ModelBinder属性使操作使用想要的模型绑定器 [HttpPut] public void Put([ModelBinder(typeof(CustomDynamicObjectModelBinderProvider))] CustomDynamicObject model) 虽然这有效但我真的不想在我的所有控制器/动作中使用这种语法。 我想我应该提一下,我的模型绑定器提供程序inheritance自: System.Web.Http.ModelBinding.ModelBinderProvider 我这样说是因为我看到以下命名空间中有另一个ModelBinderProvider类: Microsoft.Web.Mvc.ModelBinding 回顾一下:如何在MVC4 RC WebApi中注册自定义模型绑定器?

asp.net mvc api return’此XML文件似乎没有与之关联的任何样式信息。 文档树如下所示。

我使用entity framework制作了一个简单的net mvc web api,当我进行api调用时,我在chrome中遇到这个错误: 此XML文件似乎没有与之关联的任何样式信息。 文档树如下所示。 在IE中没有出现这个错误,而是api的结果导致json文件的下载…我想要设置响应,例如结果将出现在浏览器中,而不是作为下载, 我该怎么做呢?

SignalR Context.User.Name返回空

每当我尝试从Hub访问Context.User.Identity ,用户详细信息始终为空。 注意: Context.User不返回null,属性只是空的: 我已经看了很多关于SO的问题,但是所有这些问题似乎都在问为什么Context.User为null ,答案是移动app.MapSignalR(); 在ConfigureAuth();下面ConfigureAuth(); ,正如我所做的那样: public void Configuration(IAppBuilder app) { ConfigureAuth(app); app.MapSignalR(); } HttpContext.Current.User也返回空,但同样只返回一个Hub 。 如果我从任何其他Controller调用它,我会获得当前登录的用户详细信息。 最后,我还发现HttpContext.Current.User.IsAuthenticated是false令人不安,但用户仍然可以访问该函数。 (请参阅上面屏幕截图中的Authorize属性。) 是否有人能够解释为什么我的用户是空的? 非常感谢所有帮助。

MVC忽略并处理Web API路由

我无法弄清楚为什么MVC而不是Web API正在处理路由。 整个路由配置如下: configuration.Routes.MapHttpRoute ( name: “AdminControllers.TicketingController”, routeTemplate: “api/company/tickets”, defaults: new { controller = “Ticketing”, id = RouteParameter.Optional, action = “GetTickets” } ); API控制器看起来像这样: public sealed class TicketingController : ApiController { [HttpGet] public HttpResponseMessage GetTickets() { return ControllerContext.Request.CreateResponse(HttpStatusCode.OK); } } 我对/api/company/tickets执行HTTP / GET请求,我收到以下错误: 未找到路径“/ api / company / tickets”的控制器或未实现IController。 exception的堆栈跟踪指向ASP.NET MVC(不是Web API): System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type […]

.NET WebApi如何防止“$ ref”:JSON的“x”输出

我正在使用Web Api和Entity Framework,我有一个名为Gift的控制器,当客户端GET是API我通过使用entity framework从DB获取所有礼物并将其作为JSON返回 这是我的控制器function public List Get() { return GiftService.GetIncludeAndActive(); } 这是服务function public List GetIncludeAndActive() { return dbSet.Include(“GiftCategory”).Where(x => x.Status == Model.Enums.GiftStatus.Active).OrderByDescending(x => x.Featured).ThenBy(x => x.Price).ToList(); } 这是礼品模特 public class Gift { public Gift() { this.CartItems = new List(); } public int ID { get; set; } public string GiftName { get; set; } […]

ASP.NET Core中的路由消歧(MVC 6)

当ASP.NET Core遇到含糊不清的命名路由时,它变得惰性。 也就是说,应用程序将在没有抛出exception的情况下运行,但是,它将无法在任何控制器上处理任何请求。 主叫客户端收到500个响应。 我将展示我是如何陷入这个烂摊子的,我想知道如何修复它。 我有一个看起来像这样的控制器: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] public class AddressesController : Controller { [HttpGet(“{aid}”, Name = “PostalLink”)] public async Task GetAddress(Guid id, Guid aid) { //…implementation is irrelevant for this question. } [HttpPost] [SwaggerResponseRemoveDefaults] [SwaggerResponse(HttpStatusCode.Created, Type = typeof(PostalRecord))] public async Task CreateAddress(Guid id, [FromBody] PostalAddress address) { address.ID = Guid.NewGuid(); await createAddress.Handle(address); return CreatedAtRoute(“PostalLink”, […]

如何向webapi询问特定的内容类型

正如我从ASP.net MVC 4发行说明中所理解的那样,它具有内容协商 ,并且它将返回客户端请求的内容类型 客户如何要求特定内容? (在我看来是闪存要求使用AMF的XML)

如何替换Web API模型绑定的行为,以便在没有传入参数时,我将收到一个新实例,而不是Null

我们有一个API,其中包含许多采用Filter对象的操作。 但是,当有人调用API方法并且没有传递任何参数时,我们最终会得到一个空引用。 为了避免在任何地方检查这个问题,我们希望改变模型绑定的行为,以便对于该类型,它返回一个新实例而不是null。 另外,我们真的不想为filter类型编写自己的绑定器,因为它可能经常更改。 我们找到了一种机制,我们可以编写一个ModelBinderParameterBinding,但后来我无法弄清楚如何将该项添加到WebAPI配置中。 那么,我们是否尝试过正确的方法,如果是这样,我们如何告诉WebAPI使用我们的新参数绑定? 这里是ModelParameterBindingModel的参考……我绝对不确定这是生产代码! 因为我无法运行或测试它:) public class QueryFilterModelBinderParameterBinding : ModelBinderParameterBinding { private readonly ValueProviderFactory[] _valueProviderFactories; private readonly IModelBinder _binder; public QueryFilterModelBinderParameterBinding(HttpParameterDescriptor descriptor, IModelBinder modelBinder, IEnumerable valueProviderFactories) : base(descriptor, modelBinder, valueProviderFactories) { if (modelBinder == null) { throw new ArgumentNullException(“modelBinder”); } if (valueProviderFactories == null) { throw new ArgumentNullException(“valueProviderFactories”); } _binder = modelBinder; […]