Tag: asp.net web api2

如何在ASP.NET WebApi2中管理缓存?

我已经使用WebAPI2实现了REST服务,该服务实现为管理由访问服务的不同客户端创建和加入的不同会话。 会话包含有关访问应用程序function的信息以及已加入同一会话的参与者的信息。 每个客户端从服务器获取会话信息和访问列表,以便每秒进行同步。 根据访问权限的更改,客户端function将更改(启用/禁用)。 我正在使用MemoryCache类在WebAPI服务中存储会话信息,如下所示。 public static class SessionManager{ private static object objForLock = new object(); public static List SessionCollection { get { lock (objForLock) { MemoryCache memoryCache = MemoryCache.Default; return memoryCache.Get(“SessionCollection”) as List; // return HttpContext.Current.Application[“SessionCollection”] as List; } } set { lock (objForLock) { MemoryCache memoryCache = MemoryCache.Default; memoryCache.Add(“SessionCollection”, value, DateTimeOffset.UtcNow.AddHours(5)); //HttpContext.Current.Application[“SessionCollection”] = […]

Asp.net 5 web api返回状态码和正文

我正在使用ASP.NET 5开发一个项目,我正在编写一个web api。 我inheritance了一些代码和数据库存储过程,使用raiserror来指示错误(用户名/密码不正确,许可证过期等)。 除消息文本外,存储过程不返回任何内容以唯一标识该错误。 我希望能够返回HTTP UNAUTHORIZED响应,但也将错误消息传递给客户端。 内置的IActionResult HttpUnauthorized()方法不允许给出理由。 所以我编写了自己的ActionResult,如下所示: public class UnauthorizedWithMessageResult : IActionResult { private readonly string _message; public UnauthorizedWithMessageResult(string message) { _message = message; } public async Task ExecuteResultAsync(ActionContext context) { using (var sw = new HttpResponseStreamWriter(context.HttpContext.Response.Body, Encoding.UTF8)) { await sw.WriteLineAsync(_message); } await new HttpUnauthorizedResult().ExecuteResultAsync(context); } } 问题是,客户端正在接收200-OK,就像一切都很好。 我已经完成了这个步骤,在完成HttpUnauthorizedResult的委托之后,状态代码确实设置为403。 看起来Web API(在某些时候)看到响应正文中的内容并确定这意味着一切正常并重置状态代码。 有没有办法解决这个问题,而不必诉诸于作为标题或其他东西发送消息? […]

无法在Web Api 2中的BadRequest上获取错误消息

我已经google了很多搜索我的问题的答案没有运气所以,让我们尝试,如果别人可以帮助我。 在进行一些validation后,我有一个Web Api 2操作来注册用户。 如果一切正常,它将返回序列化用户,如果没有,则返回BadRequest响应中发送的错误消息。 另一方面,我有一个WPF客户端调用API进行响应。 我的问题是我无法得到错误发送的原因,客户端只是得到Bad Request错误消息。 这是代码的一部分: Web Api动作: public async Task AddUser(NewUserDTO { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (!model.IdCliente.HasValue) { ModelState.AddModelError(“”, “No existe el cliente”); return BadRequest(ModelState); } // do save stuff return Ok(TheModelFactory.Create(user)); } 客户端function: public async Task AddUser(NewUserDTO dto) { using (var client = new HttpClient()) { client.BaseAddress […]

使用webapi和引导日期选择器在angularjs中绑定日期

给定一个返回json值的WebApi2服务,如下所示: { id: 1109, effectiveDate: “2014-10-05T00:00:00”, // the date is a string (newtonsoft.json) text: “Duis et rhoncus nibh. Cras rhoncus cursus diam”, fundSource: “Test” } 我需要日期正确地出现在绑定的angular / bootstrap / date选择器中 。 我需要在将日期绑定到输入框时将日期转换为格式yyyy-mm-dd(没有时间)。 只是一个指向某些文档的指针,解释了从API序列化日期到角度的正确方法。 我确信effectiveDate实际上应该是Date对象而不是string 。 对于completness,返回json值的服务如下所示: app.factory(‘Service’, [‘$http’, ‘$location’, ‘$interpolate’, function ($http, $location, $interpolate) { return { get: function (account) { var url = ‘api/consultations/{account}’; […]

Web Api 2 – 如何从HTTPGET返回映像(来自Azure存储的MemoryStream)而不保存到磁盘?

我正在使用带有C#和Azure的Web Api 2,以及如何返回图像(从Memorystream基础)以在页面上显示的问题… 这是我的Controller HTTPGET [Route(“api/PhotoSubmit/GetPhoto/{id}”)] [HttpGet] public HttpResponseMessage GetPhotoById(int id) { StorageServices storage = new StorageServices(); MemoryStream ms = storage.DownloadBlob(id); // return what ? } 这是servicecall的开头: $http({ method: ‘GET’, url: ‘api/PhotoSubmit/GetPhoto/’ + $routeParams.id, accept: ‘application/json’ }) .success(function(result) { // How do i handle the result and what HTML should i use ? <img ? […]

使用字符串参数调用web api

我有一个web api,我有2个方法,一个没有参数,两个有不同类型的参数(字符串和整数)。 调用字符串方法时它不起作用…我在这里缺少什么? public class MyControllerController : ApiController { public IHttpActionResult GetInt(int id) { return Ok(1); } public IHttpActionResult GetString(string test) { return Ok(“it worked”); } } WebApiConfig.cs: public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = […]

在Web.API控制器中自动反序列化为类似字符串的类

我有一个Web.API端点,它将这样的对象作为参数: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public UserName UserName { get; set; } } 例如: [Route(“api/person”)] [AcceptVerbs(“POST”)] public void UpdatePerson(Person person) { // etc. } (这只是一个例子 – 我们实际上并没有通过我们的Web.API端点接受用户名) 我们的UserName类是一个将string隐式运算符定义的对象,因此我们将它视为整个应用程序中string的处理方式。 遗憾的是,Web.API不会自动知道如何将相应的JavaScript Person对象反序列化为C# Person对象 – 反序列化的C# Person对象始终为null。 […]

如何使用ASP.NET Web API在DocumentDB中创建和更新文档之间的关系

我是.NET和Azure的新手,我正在尝试创建一个简单的Web API,以帮助我学习。 我有两个DocumentDB文档集合。 每个集合中的文件定义如下: public class Log { [JsonProperty(PropertyName = “id”)] public string Id { get; set; } [JsonProperty(PropertyName = “studentName”)] public string StudentName { get; set; } [JsonProperty(PropertyName = “assignment”)] public string Assignment { get; set; } [JsonProperty(PropertyName = “dueDate”)] public DateTime DueDate { get; set; } [JsonProperty(PropertyName = “goal”)] public string Goal { […]

Web Web API中的严格映射(Over-Posting)

我刚刚意识到从查询发送的JSON与我的API之间的映射并不严格。 我给你更多解释: 这是我的C#POCO public partial class AddressDto { public string AddrId { get; set; } public string Addr1 { get; set; } public string Addr2 { get; set; } public string PostalCode { get; set; } public string City { get; set; } public string Country { get; set; } } 和REST JSON查询 PUT http://Localhost:55328/api/ClientAddr/ADD-2059-S002 […]

为webapi模型中的对象指定唯一标识符属性

在对WebApi的POST调用中,我试图返回一个Created(newobject)的东西。 但是ApiController中没有Created的签名,它只能接受对象并完成剩下的工作。 如果我返回类似的东西,它工作正常: return Created(newobject.blahid.ToString(), newobject); 或者如果我做了 return CreatedAtRoute(“DefaultApi”, new { controller = ControllerContext.ControllerDescriptor.ControllerName, id = newobject.blahid.ToString()}, newobject); 我想简化这个: return Created(newobject); 我需要在BaseController中实现一个方法 public class BaseController : ApiController { protected new CreatedNegotiatedContentResult Created(T content) { var id = GetId(content);//need help here return base.Created(id, content); } } 我不想担心在不同模型中以不同方式调用对象的唯一标识符,例如myobjguid,someblahguid等。我只想找到它并将其标记为“id”。 如果我的模型是 public class Model_A { public List ChildModels { […]