Tag: asp.net web api

Web API转换为Azure Mobile Service而不是序列化所有属性

我有一个工作的Web API,我正在转换为.Net Azure移动服务。 API返回一个复杂的模型 – 具有属性的对象 – 其中一些是其他对象的集合。 这与普通的Web API一样正常,但是使用Azure移动服务我遇到了一个问题,即我的某个模型没有序列化它的所有属性。 当我在控制器中的return语句上设置断点时,我看到所有属性及其值都存在。 这让我相信问题在于序列化(JSON)。 return Request.CreateResponse(HttpStatusCode.OK, myModel); 正在序列化的属性示例: public Guid Id { get; set; } public IEntityDto ModelDto { get; set; } //this is an object with many properties all of which serialize 未序列化的属性示例: public ItemStatus Status { get; set; } //this is an enum public string […]

将xml响应映射到类?

我不知道如何将一些XML表示为C#类。 有没有人有任何关于如何正确映射这个xml的建议? 以下是我的尝试: 1 5 public class authenticationResponse { [XmlElement(“Accounts”)] [DataMember] public List Accounts { get; set; } } public class Account { public long id { get; set; } }

在Web API 2中返回一个String

听起来很简单,我没有找到任何关于此的文档,也许我写错了所以如果是这样的话,一些关于此的好文档将不胜感激。 我只想返回一个字符串或类型字符串的模型。 return “string here”; 我每次都会收到此错误: Severity Code Description Project File Line Error CS0029 Cannot implicitly convert type ‘string’ to ‘System.Web.Http.IHttpActionResult’ TaskManagement C:\dev\TaskManagement\TaskManagement\Controllers\JobsController.cs 157 我也尝试过使用CAST – 同样的错误。 return (IHttpActionResult)”string”

Web API操作参数间歇性为null

相关问题: Web API ApiController PUT和POST方法间歇性地接收空参数 背景 在对现有Web API项目进行负载测试时,由于参数在发布到操作时为null,因此我注意到很多空引用exception。 原因似乎是在dev环境中运行时为日志请求注册的自定义消息处理程序。 删除此处理程序可解决此问题。 我知道在Web API中我只能读取一次请求体,并且读取它会始终导致我的参数为null,因为模型绑定将无法进行。 出于这个原因,我正在使用带有ContinueWith的ReadAsStringAsync()方法来读取正文。 看起来这在~0.2%的请求中表现奇怪(在使用Apache Bench进行本地调试期间)。 码 在最基本的层面上,我有以下几点: 模型 public class User { public string Name { get; set; } } API控制器 public class UsersController : ApiController { [HttpPost] public void Foo(User user) { if (user == null) { throw new NullReferenceException(); } } } 消息处理程序 […]

在Web API中未发布数据时,请避免使用null模型

这个问题类似于我想要实现的目标: 当没有发布的属性与模型匹配时,在ASP.Net Web API中避免空模型 但它没有得到回答。 我有一个采用GET模型的路线: [HttpGet, Route(“accounts”)] public AccountListResult Post(AccountListRequest loginRequest) { return accountService.GetAccounts(loginRequest); } 该模型使用动作filter中的其他数据填充。 在这种情况下,所有需要知道的是UserId,动作filter将基于cookie /标头添加到模型中,并与请求一起传入。 我想在WebAPI中使用所有默认模型绑定,但我想避免使用null对象。 我不相信模型绑定解决了我的问题。 如何替换Web API模型绑定的行为,以便在没有传入参数时,我将收到一个新实例,而不是Null 这更接近我想要做的事情,除了它的每种类型,这是乏味的。

Web API模型validation和默认值

这是我之前的问题Web API属性路由和validation的精神inheritance者- 可能吗? 我认为这个问题太过笼统。 大多数问题都已解决,但默认值问题仍然存在。 基本上我已经解决了许多难题。 我有这个: [HttpGet] [Route(“test/{id}”] public IHttpActionResult RunTest([FromUri]TestRequest request) { if (!ModelState.IsValid) return BadRequest(ModelState); return Ok(); } 我的TestRequest类: public class TestRequest { public string id { get; set; } [DefaultValue(“SomethingDefault”)] public string something { get; set; } } 问题是,如果something查询字符串中没有参数,则该模型为“有效”,但something为null 。 如果我为something指定了空白值(即GET test/123?something= ),则默认值开始起作用,模型再次有效。 为什么是这样? 如何在此模型中获取默认值? 作为奖励,为什么在未指定参数时,不使用默认值,但是当空白字符串明确特定时,使用默认值? (我一直在浏览ASP.NET堆栈源代码,并且在模型绑定器和绑定上下文中非常深入。但我最好的猜测是不对的 – 看起来只有在参数值为null时才使用DefaultValueAttribute但这不是这里的情况)

WebApi POST不包含ID字段

我仍然只需要几天的ASP.NET和WebAPI框架,所以我必须错过一些非常简单的东西。 我有一个模型,有一些属性和ID(作为一个属性,有一个私有的setter但没有帮助)。 public long ID { get; private set; } [Required(ErrorMessage = “Location coordinate X is required.”)] public double X { get; set; } [Required(ErrorMessage = “Location coordinate Y is required.”)] public double Y { get; set; } 然后我有一个控制器方法post: public HttpResponseMessage Post(MyModel model) 当我启动项目并转到自动生成的API文档时,我可以看到样本包含ID作为输入字段。 我希望API忽略ID输入字段。 我可以自己忽略它,但我不喜欢我的代码中那些必须记住 – 不要使用的东西。 一种选择是为输入创建一个单独的模型,但这意味着我必须维护两个类而不是一个。 是否有任何数据注释完全忽略此属性?

如何使用ASP.Net WebApi重载方法?

我有一种情况,我有两个方法,一个接受poco和另一个poco列表在我的控制器类中: [AcceptVerbs(“PUT”)] [ActionName(“Item”)] public void SaveItem([FromBody] Item item) { m_controller.SaveItem(item); } [AcceptVerbs(“PUT”)] [ActionName(“Items”)] public void SaveItems([FromBody] List items) { m_controller.SaveItem(items); } 我的路由表看起来像: routes.MapHttpRoute(“Item Route”, “api/item/{orderId}”, new { controller = “MyOrder”, action = “Item”, orderId = RouteParameter.Optional }); routes.MapHttpRoute(“Items Route”, “api/items/{orderId}”, new { controller = “MyOrder”, action = “Items”, orderId = RouteParameter.Optional }); 这按预期工作。 但我想重构代码以尝试重载。 我试图重载我的控制器中的方法,只有一个路由但它失败了500错误 […]

如何在Web Api Post请求Json中检测重复键

当请求Json包含重复键时,我需要从ASP.NET Web API Post请求返回400错误。 例如,如果请求是 { “key1”: “value1”, “key2”: 1000, “key2”: 2000, “key3”: “value3” } 然后我想要抛出错误,因为有两个“key2”键。 我的控制器方法看起来像 [HttpPost] public IHttpActionResult PostMethod([FromBody]RequestModel request) { ….. } 和我的RequestModel模型一样 public class RequestModel { [Required] public string Key1 {get; set; } [Required] public int Key2 {get; set; } public string Key3 {get; set; } } 在上面的示例中,Json序列化程序似乎很乐意接受请求并使用2000填充Key2,或者密钥的最后一个实例。 我想我需要做一些涉及JsonSerializerSettings类的事情,或者实现一个自定义的JsonConverter,但我不确定如何继续。

使用MemoryStream和ZipArchive将zip文件返回到asp.net web api中的客户端

我试图使用以下代码将zip文件从asp.net web api返回给客户端: private byte[] CreateZip(string data) { using (var ms = new MemoryStream()) { using (var ar = new ZipArchive(ms, ZipArchiveMode.Create, true)) { var file = archive.CreateEntry(“file.html”); using (var entryStream = file.Open()) using (var sw = new StreamWriter(entryStream)) { sw .Write(value); } } return memoryStream.ToArray(); } } public HttpResponseMessage Post([FromBody] string data) { HttpResponseMessage […]