Tag: asp.net web api

WebApi – 反序列化和序列化备用属性名称

我试图找出如何使用ASP.NET WebApi指定备用属性名称 – 并使其适用于反序列化+序列化以及JSON + XML。 到目前为止,我只发现了部分解决方案。 我想将属性名称公开为带有下划线的小写,并且(例如)为了具有不同的内部名称: 外部: 现场一个 现场二 内部: ItemOne ItemTwo 对于测试,这是一个POST控制器动作,只是转发它收到的内容: // POST api/values public TestSerialization Post([FromBody]TestSerialization value) { return value; } 还有一个测试实体: public class TestSerialization { [DataMember(Name = “field_one”)] // Doesn’t appear to change anything public string ItemOne { get; set; } [JsonProperty(PropertyName = “field_two”)] // Only works for serialization […]

找到了与请求Web API匹配的多个操作?

我正在使用Web API,我是新手。 我陷入了路由问题。 我有一个控制器有以下行动: // GET api/Ceremony public IEnumerable GetCeremonies() { return db.Ceremonies.AsEnumerable(); } // GET api/Ceremony/5 public Ceremony GetCeremony(int id) { Ceremony ceremony = db.Ceremonies.Find(id); return ceremony; } public IEnumerable GetFilteredCeremonies(Search filter) { return filter.Ceremonies(); } 当我将动作GetFilteredCeremonies添加到我的控制器时出现问题。 在我对GetCeremonies操作进行ajax调用时添加此项后,它会返回一个Exception并显示以下消息: “Message”:”An error has occurred.”,”ExceptionMessage”:”Multiple actions were found that match the request 仅供参考:参数Search是Model类,它包含属性和函数名称Ceremonies。 编辑 路线: config.Routes.MapHttpRoute( name: […]

global.asax中的Application_Error未捕获WebAPI中的错误

对于我正在开发的项目,我们正在实现的一件事是我们在一些旧的ASP.NET和MVC项目团队中编写的代码 – 一个Application_Errorexception捕获器,它将开发团队的电子邮件发送给开发团队。exception经验和最相关的细节。 这是它的外观: Global.asax中: protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); string path = “N/A”; if (sender is HttpApplication) path = ((HttpApplication) sender).Request.Url.PathAndQuery; string args = string.Format(“Path: {0}”, path); // Custom code that generates an HTML-formatted exception dump string message = Email.GenerateExceptionMessage(ex, args); // Custom code that sends an email […]

Web API:在操作或控制器级别配置JSON序列化程序设置

在应用程序级别覆盖Web API的默认JSON序列化程序设置已涵盖在许多SO线程中。 但是如何在动作级别配置其设置? 例如,我可能希望在我的一个操作中使用camelcase属性进行序列化,但不能在其他操作中进行序列化。

调用Microsoft.Owin.Cors后无法加载System.Web.Cors程序集

当我在解决方案资源管理器中检查System.Web.Cors程序集引用时, Version是5.2.3.0 。 “ Specific Version属性设置为False 。 路径是本地项目bin文件夹。 从文件资源管理器检查.dll属性时,文件的产品版本和文件版本。 也是5.2.3 。 我的Web.config : 我的packages.config (我认为麻烦的程序集是Microsoft.AspNet.WebApi.Cors ,但我在这里包含了另一个类似名称的程序集): 在Startup.cs中抛出此行的错误 app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 这是完整的错误: System.IO.FileLoadException was unhandled by user code FileName=System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 FusionLog==== Pre-bind state information === LOG: DisplayName = System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Fully-specified) LOG: Appbase = file:///P:/project-z4a/project-z4a/ LOG: Initial PrivatePath = P:\project-z4a\project-z4a\bin Calling assembly : Microsoft.Owin.Cors, […]

控制器按区域划分

可能重复: 如何注册已在AREA中创建的控制器 我有一个问题 – 是否有可能做下一个? 我有三个方面: _Default SiteOne SiteTwo 在每个区域内我都有一个名称相同的ApiController,但当然在不同的名称空间中: MvcAppliaction.Areas._Default.Controllers.ValuesController MvcAppliaction.Areas.SiteOne.Controllers.ValuesController MvcAppliaction.Areas.SiteTwo.Controllers.ValuesController 我还有一个当前值(我想使用)的配置区域。 如果他进入浏览器,我想将用户映射到适当区域(我可以在配置中找到)中的控制器: /api/values 例如,如果配置文件中的当前区域是SiteOne,那么此请求应该映射到MvcAppliaction.Areas.SiteOne.Controllers.ValuesController控制器,但是如果我将配置文件中的当前区域更改为_Default的SiteTwo,则应将其映射到正确的控制器。 PS。 使用MVC控制器很简单,您只需设置路线: routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }, namespaces: new[] { “MvcApplication.Web.Areas.” + SiteName + “.Controllers”) } );

Web API服务 – 如何使服务器上的请求同时执行

我正在使用由IIS 7.5托管的WebApirest服务控制器,我从这篇文章中了解到: 是否所有Web请求都是并行执行的并且是异步处理的? 默认情况下, webApi服务并行执行所有传入请求, 但 前提是当前多个请求 (在特定时间)来自不同的会话。 也就是说,如果单个客户端将同时向服务器发送一些请求,则所有这些请求将按顺序执行,并且不会同时执行 。 这种行为对我们来说是一个真正的问题 ,因为在某些情况下,我们的客户端会异步地(通过浏览器)从不同客户端的侦听器发送大量请求,并且所有这些请求实际上都会排队,而不是在服务器上同时执行 。 因此,在某些情况下,我们遇到了严重的性能问题 ,这些问题在客户的网页上非常明显。 我们怎样才能解决这个问题? 我知道我们可以禁用会话状态,但这不是正常的事情。

使用AngularJS和ASP.NET Web API上载/下载字节数组

我花了几天时间研究和研究上传/下载byte []的解决方案。 我很接近,但有一个问题似乎出现在我的AngularJS代码块中。 在SO上有一个类似的问题,但它没有回应。 请参阅https://stackoverflow.com/questions/23849665/web-api-accept-and-post-byte-array 以下是在我陈述问题之前设置上下文的一些背景信息。 我正在尝试创建一个通用的客户端/服务器接口来上传和下载byte [],它们被用作专有服务器数据库的一部分。 我在客户端上使用TypeScript,AngularJS,JavaScript和Bootstrap CSS来创建单页面应用程序(SPA)。 我在服务器上使用ASP.NET Web API / C#。 正在开发SPA以取代Silverlight中开发的现有产品,因此它受现有系统要求的限制。 SPA还需要针对各种设备(移动设备到桌面设备)和主要操作系统。 在几个在线资源(下面列出)的帮助下,我已经完成了大部分代码。 我在下面的Byte Rot链接中使用异步多媒体格式化程序来实现byte []。 http://byterot.blogspot.com/2012/04/aspnet-web-api-series-part-5.html 从ASP.NET Web API中的控制器返回二进制文件 我在客户端使用转换为Uint8Array的jpeg作为我的测试用例。 实际的系统字节数组将包含压缩成预定义数据包的混合内容。 但是,我需要能够处理任何有效的字节数组,因此图像是一个有效的测试用例。 使用下面显示的客户端和服务器代码以及Byte Rot Formatter(未显示但在其网站上提供)将数据正确地传输到服务器。 我已经validation了jpeg在服务器上作为byte []和字符串参数元数据正确接收。 我使用Fiddler来validation是否将正确的响应发送回客户端。 大小是正确的 图片可在Fiddler中查看。 我的问题是下面显示的Angular客户端代码中的服务器响应不正确。 如果不正确 ,我的意思是错误的大小(~10K对比~27.5K)并且它不被识别为UintArray构造函数的有效值 。 当我将光标放在下面客户端代码中显示的返回“响应”上时,Visual Studio显示JFIF,但没有其他可见的内容指示符。 / **********************服务器代码************************ / 在[FromBody] byte []之后为代码添加了缺少的项目 public class ItemUploadController : ApiController{ [AcceptVerbs(“Post”)] public […]

如何将zip文件发送到ASP.NET WebApi

我想知道如何将zip文件发送到WebApi控制器,反之亦然。 问题是我的WebApi使用json传输数据。 zip文件不可序列化,也可以是流。 字符串可以序列化。 但是必须有另一种解决方案,而不是将zip转换为字符串而不是发送字符串。 这听起来不对。 知道怎么做的吗?

如何在ASP.NET Web API中排队后台任务

我有一个webapi,旨在以队列方式处理报告。 该应用程序采取的步骤如下: 接收内容 将内容映射到对象并将其放入队列 轮询队列中的待处理项目 一次处理队列中的项目 我当时正在考虑使用Entity Framework来创建排队项目的数据库,例如: public class EFBatchItem { [Key] public string BatchId { get; set; } public DateTime DateCreated { get; set; } public DateTime DateCompleted { get; set; } public string BatchItem { get; set; } public BatchStatus Status { get; set; } } 我的问题 – 是否有一种更有效的方法,使用NServiceBus,BlockingCollection或ConcurrentQeueue,而不是不断轮询数据库并逐个拉出待处理的项目? 我之前没有使用过队列。 一种想法是创建一个任务队列,并在一个单独的线程上处理所有挂起的任务。 有点类似于使用线程处理队列的最有效方法,但我想确保我走最有效的路线。 […]