Tag: asp.net web api

序列化为JSON,尽管指定了NullValueHandling,但使用Json.NET和Web API省略了Nullable Date

using Newtonsoft.Json; namespace FAL.WebAPI2012.Controllers { public class Person { public int Id {get;set;} public string FirstName {get;set;} public string LastName {get;set;} [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)] public DateTime? Dob { get; set; } } public class TestNullsController : ApiController { // GET api/ public Person Get() { Person myPerson = new Person() { Dob […]

从RestSharp客户端将int列表传递给Web API

当我使用REST Sharp下面的代码时,我无法传递listOfSelectedTicketsIds它总是为null。 请求Rest .net客户端 var _stDeveloperApi = new RestClient(“http://127.0.0.1/”); var url = string.Format(“api/v1/SignalR/MultiClickMode”); var listOfSelectedTicketsIds = new List { 2, 3 }; var request = new RestRequest(url, Method.GET); request.AddParameter(“listOfSelectedTicketsIds”, listOfSelectedTicketsIds, ParameterType.GetOrPost); var response = _stDeveloperApi.Execute(request); Web API方法 [HttpGet] public HttpResponseMessage MultiClickMode(List listOfSelectedTicketsIds) { var response = new HttpResponseMessage(); try { } catch (Exception ex) { […]

Web API – 在DbContext类中访问HttpContext

在我的C#Web API应用程序中,我在所有表中添加了CreatedDate和CreatedBy列。 现在,我想在任何表中添加新记录时填充这些列。 为此,我在DbContext类中重写了SaveChanges和SaveChangesAsync函数,如下所示: public class AuthDbContext : IdentityDbContext { public override int SaveChanges() { AddTimestamps(); return base.SaveChanges(); } public override async Task SaveChangesAsync() { AddTimestamps(); return await base.SaveChangesAsync(); } private void AddTimestamps() { var entities = ChangeTracker.Entries().Where(x => (x.State == EntityState.Added)); var currentUsername = !string.IsNullOrEmpty(HttpContext.Current?.User?.Identity?.Name) ? HttpContext.Current.User.Identity.Name : “SYSTEM”; foreach (var entity in entities) […]

路由和消息处理程序:请求处理订单问题

我遇到了ASP.NET Web API请求管道的执行顺序问题。 根据ASP.NET Web API文档( 此处提供 ),全局消息处理程序应该在路由机制之前执行。 在此图像上, MessageHandler1是全局消息处理程序,而MessageHandler2特定于Route 2 。 我创建了一个非常简单的例子来表明执行顺序中似乎存在问题……或者我真的错过了一些重要的事情。 我有这个控制器 public class FooController : ApiController { [HttpPut] public string PutMe() { return Request.Method.Method; } } 它只接受PUT请求。 应用程序配置如下: protected void Application_Start() { var configuration = GlobalConfiguration.Configuration; configuration.MessageHandlers.Add( new SimpleMethodOverrideHandler() ); configuration.Configuration.Routes.MapHttpRoute( name: “Foo”, routeTemplate: “api/foo”, defaults: new { controller = “foo”, action […]

在OData WebApi Url中传递参数

使用Web Api我有一个OData EndPoint,可以从数据库返回产品。 我有多个具有相似模式的数据库,并希望在URL中传递一个参数来识别Api应该使用哪个数据库。 当前的Odata终点: HTTP://本地主机:62999 /产品 我想要的是: http:// localhost:62999/999 /产品 在新的Url中,我传入了999(数据库ID)。 数据库ID用于指定从中加载产品的数据库。 例如localhost:62999/999/Products(‘ABC123′)将从数据库999加载产品’ABC123’,但是下一个请求localhost:62999/111/Products(‘XYZ789′)将从数据库加载产品’XYZ789′ 111。 下面的Url有效,但我不喜欢它。 localhost:62999/Products(‘XYZ789’)?database=111 这是控制器的代码: public class ProductsController : ErpApiController //extends ODataController, handles disposing of database resources { public ProductsController(IErpService erpService) : base(erpService) { } [EnableQuery(PageSize = 50)] public IQueryable Get(ODataQueryOptions queryOptions) { return ErpService.Products(queryOptions); } [EnableQuery] public SingleResult Get([FromODataUri] string key, […]

ASP.NET Core Identity不会注入UserManager

我有一个较旧的asp.net核心身份数据库,我想将一个新项目(一个web api)映射到它。 仅仅为了测试,我复制了Models文件夹,以及上一个项目中的ApplicationUser文件(ApplicationUser只是inheritance自IdentityUser,无论如何都没有变化) – 首先做数据库似乎是一个坏主意。 我在ConfigureServices中注册了Identity(但是我没有将它添加到管道中,因为我的唯一目的是使用UserStore) services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); 我的期望是现在 UserManager ……应该自动注入构造函数中。 但是,将以下代码添加到控制器私有UserManager _userManager时; public UserController(UserManager userManager) { _userManager = userManager; } …每次调用api都会以exception结束:HttpRequestException:响应状态代码不表示成功:500(内部服务器错误)。 删除“注入”代码可以顺利运行可以接受请求的web api。 在我的任何代码到达之前发生这种情况很难调试。 知道为什么会这样吗? PS从“exception设置”窗口启用所有exception后,我得到了这个: 抛出exception:’System.InvalidOperationException’ Microsoft.Extensions.DependencyInjection.dll 附加信息:尝试激活’Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4 [Namespace.Models]时,无法解析类型’Namespace.Data.ApplicationDbContext’的服务。 ApplicationUser,Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole,Namespace.Data.ApplicationDbContext,System.String]”。

WebAPI CORS和Ninject

我有一个具有ninject的ac #WebAPI项目,所有的get函数都在工作。 但是,每当我尝试发布时,我都会从api获得“Method Not Allowed”响应。 我已经阅读了一些地方,这是因为当api拒绝交叉来源呼叫时。 所以我使用了包管理器控制台并安装了Microsoft.AspNet.WebApi.Cors nugent包,并按照文章http://www.asp.net/web-api/overview/security/enabling-cross-origin的说明进行操作。 -requests-in-web-api 。 我的问题是现在Ninject不工作但抛出以下内容:尝试通过方法’System.Web.Http.GlobalConfiguration..cctor()’来访问字段’System.Web.Http.GlobalConfiguration.CS $ 9__CachedAnonymousMethodDelegate2’失败。“} 有人能帮我一下吗? 抛出错误的行是:System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new Ninject.WebApi.DependencyResolver.NinjectDependencyResolver(kernel); Ninject配置文件 public static class NinjectWebCommon { private static readonly Bootstrapper bootstrapper = new Bootstrapper(); /// /// Starts the application /// public static void Start() { DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); bootstrapper.Initialize(CreateKernel); } /// /// Stops the application. /// public static […]

ASP.net MVC 4 WebApi – 测试MIME多部分内容

我有一个ASP.net MVC 4(beta)WebApi,看起来像这样: public void Post() { if (!Request.Content.IsMimeMultipartContent(“form-data”)) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } IEnumerable parts = Request.Content.ReadAsMultipartAsync().Result; // Rest of code here. } 我试图对这段代码进行unit testing,但无法解决如何做到这一点。 我在这里走在正确的轨道上吗? [TestMethod] public void Post_Test() { MultipartFormDataContent content = new MultipartFormDataContent(); content.Add(new StringContent(“bar”), “foo”); this.controller.Request = new HttpRequestMessage(); this.controller.Request.Content = content; this.controller.Post(); } 此代码抛出以下exception: System.AggregateException:发生一个或多个错误。 —> System.IO.IOException:MIME多部分流的意外结束。 MIME多部分消息未完成。 System.Net.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http.Http。 […]

GZip标头中的幻数不正确。 确保传入GZip流

我正在尝试使用WebAPI从EntityFramework中检索产品名称及其ID作为NameID对象。 代码如下。 public class ProductController : ApiController { protected MainDataContext db = new MainDataContext(); // GET /api/values public IQueryable Get() { return db.Products.Select(x=>new NameID{ ID=x.ID,Name=x.Name }).AsQueryable(); } // GET /api/values/5 public NameID Get(long id) { var result = db.Products.Select(x=>new NameID{ ID=x.ID,Name=x.Name }).SingleOrDefault(x => x.ID == id); if (id == 0 || result == null) throw […]

如何阻止HttpClient.GetAsync(uri)挂起?

我有以下代码用于调用uri: var uri = string.Format(“Helpers/ProfileList/Online/?locationId=0&skip=0&take={0}”, numProfiles); HttpResponseMessage response = await client.GetAsync(uri); response.EnsureSuccessStatusCode(); uri指向一个自定义的web api uri(我可以调试并完成)。 但是,当调用api中的最后一个return语句时,似乎什么也没发生。 它应该转到response.EnsureSuccessStatusCode(); 线,但事实并非如此。 它似乎挂了。