Tag: asp.net web api

从.NET 2.0客户端调用Web Api服务

是否可以从.NET 2.0客户端调用Web Api方法? 请参考此处的指南: http : //www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client 这些客户端的一些dll似乎与.NET 2.0不兼容 有没有办法从.NET 2.0客户端调用Web Api方法而不添加任何dll?

在Web API中使用Handler并根据请求解析Unity

我使用Unity作为我的IoC框架,我正在基于处理程序中每个请求的标头中的值创建一个类型: var container = new UnityContainer(); container.RegisterType(new InjectionConstructor(valuefromHeader)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 问题是处理程序的SendAsync意味着全局容器被不同的请求覆盖,并且在构造函数中使用IFoo的控制器获取的值不正确。 1)我可以使SendAsync同步吗? 2)如果没有,如何为每个请求创建不同的实例并让IoC容器安全地解析? 我查看了以下文章但没有成功: http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver http://www.strathweb.com/2012/11/asp-net-web-api -and-dependencies-in-request-scope / http://benfoster.io/blog/per-request-dependencies-in-aspnet-web-api-using-structuremap 提前致谢。

Web API表单 – urlencoded绑定到不同的属性名称

我期待一个内容类型设置为的POST请求: 内容类型:application / x-www-form-urlencoded 请求正文如下所示: 如first_name =约翰&姓氏=香蕉 我对控制器的操作有这个签名: [HttpPost] public HttpResponseMessage Save(Actor actor) { …. } Actor类的给定位置为: public class Actor { public string FirstName {get;set;} public string LastName {get;set;} } 有没有办法强制Web API绑定: first_name => FirstName last_name => LastName 我知道如何使用内容类型设置为application / json但不使用urlencoded的请求来执行此操作。

根据用户确定要在Json.Net中序列化的属性

我正在创建一个ASP MVC Web API。 我现在想要根据正在执行请求的用户确定要对象序列化的属性。 ApiController知道用户。 基于用户,我有一个函数返回一个字符串数组,其中包含用户对模型有权限的属性名称。 如何将用户传递给ContractResolver,以便它只影响当前请求而不会影响其他用户的同步请求?

POST和PUT的不同型号要求

假设我有一个控制器CatController其中包含GET,POST和PUT操作。 它们都使用相同的Cat资源,如下所示: public class CatDto { public int Id { get; set; } [Required] public string Name { get; set; } [Required] public bool IsFriendly {get; set; } } 但是,只有在创建新cat(POST)时才需要Name和IsFriendly属性,但在更新它(PUT)时可选,以允许仅更新单个属性。 到目前为止,我处理这个问题的方法只是有两个类,一个CreateCat和UpdateCat ,它们具有相同的属性但不同的数据注释。 但是我不想要维护两个几乎相同的类。 我当然可以在每个操作中手动validation模型,但数据注释对于诸如全局模型validation器和自动生成Swagger架构之类的东西非常有用。 我也使用Swagger模式自动生成SDK(使用ApiMatic ),这导致生成两个重复的类( CreateCat和UpdateCat ),实际上应该只是单个资源( Cat )。 有没有另一种方法可以实现我只想用一个class级做的事情?

ASP.NET Web API获取子列表(分层资源)

我有以下rest架构,我想使用ASP.NET Web Api实现: http://mydomain/api/students http://mydomain/api/students/s123 http://mydomain/api/students/s123/classes http://mydomain/api/students/s123/classes/c456 我使用ApiController和以下两种方法使前两个链接正常工作: public class StudentsController : ApiController { // GET api/students public IEnumerable GetStudents() { } // GET api/students/5 public IEnumerable GetStudent(string id) { } } 在同一个控制器中,(或者我需要一个名为ClassesController的不同控制器?),我如何实现最后两个链接? 另外,“类”部分的路由是什么样的(如果需要)? 这是我的WebApiConfig(我想保持动态,而不是硬编码到/ classes的路径,如果可能的话: config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); // EDIT – I’m getting 404’s […]

ASP.NET应用程序的高内存使用率

我们的一些ASP.Net应用程序存在问题。 我们的一些应用程序从一开始就声称拥有大量内存作为其工作集。 在我们的2个webfarm服务器(每个4GB的RAM)上运行多个应用程序。 我们有一个稳定的环境,大约1.2GB的内存空闲。 然后我们添加一个MVC5 + WebApi v2 +entity framework应用程序,立即声称1 + gb作为工作集内存,而实际上只使用大约300mb。 这导致其他应用程序抱怨没有足够的内存。 我们已经尝试设置虚拟内存限制和私有内存限制,但没有任何效果。 如果我们将其设置为大约500mb,应用程序仍然使用或多或少相同数量的内存(超过500)并且似乎不尊重所设置的限制。 作为参考,我用一个空的MVC5项目(VS2013模板)测试了这个,这已经声称300mb的内存,而只使用大约10mb。 将应用程序设置为32位应用程序似乎对减小工作集的大小有一些影响。 有没有办法减少工作集的大小,或对其大小实施硬性限制? 编辑:如果使用Web Api v2和Entity Framework为项目使用大量内存,我的API控制器如下所示: namespace Foo.Api { public class BarController : ApiController { private FooContext db = new FooContext(); public IQueryable GetBar(string bla) { return db.Bar.Where(f => f.Category.Equals(bla)).OrderBy(f => f.Year); } } 因为他们看了我能找到的大多数教程(包括来自微软的教程)。 由于LINQ延迟加载,因此在此处using不起作用。 如果我在任何地方都添加了ToList(未经测试),它可以工作,但这会产生任何其他影响吗? edit2:如果我这样做的话 namespace […]

CreateUserIdenityAsync返回自定义IdentityUser的“UserId not found”exception

我正在关注使用JWT创建基于身份和角色的声明的bitoftech教程 。 我的应用程序用户是一个带有int PK的自定义User表。 目前,GenerateUserIdentityAsync方法只返回一个奇怪的UserId not found错误。 这是我的代码: ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, “JWT”); 和User实体中的实现: public async Task GenerateUserIdentityAsync(UserManager manager, string authenticationType) { //error on this line: CreateIdentityAsync throws error var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); return userIdentity; } 我的UserManager类定义如下: public class AppUserManager : UserManager 奇怪的是,当我调试时, GenerateIdentityAsync中的实例确实有一个UserId属性,但是只有一个id ,我想知道这是不是错误的地方? (听起来不对) 我正在查看源代码 (第80行),但我无法弄清楚exception被抛出的位置。 抛出的确切exception是: UserId not found. […]

WebAPI DataMember通过application / x-www-form-urlencoded进行de / serial化时不使用的名称

处理HTTP POST表单请求时,已花费几个小时尝试解决DataMemberAttribute上忽略的Name属性的问题( Content-Type: application/x-www-form-urlencoded )。 我在.NET 4.5上运行Microsoft.AspNet.WebApi 5.2.3应用程序,由IIS托管。 我有这个模型(演示): // library public interface IPayload { string DataId { get; set; } int RelationId { get; set; } } // web app project [DataContract] public class MyPayload : IPayload { [Required] [DataMember(Name = “id”)] public string DataId { get; set; } [Required] [DataMember(Name = “rel”)] public […]

ASP.NET WebApi IExceptionLogger不捕获exception

我正在尝试设置如下所述的全局exception处理程序: Web API全局error handling 。 我设置了一个在控制器构造函数中抛出exception的情况。但是我的exception没有被记录。相反,WebApi只是将exception和完整堆栈跟踪作为JSON消息返回给调用客户端。 我不知道它是否重要,但我的控制器操作正在使用async / await,如下所示: [HttpGet, Route(“GetLocationNames”)] public async Task<IEnumerable> Get() { return await adapter.GetLocationNames(); } 我有以下实现: using log4net; using System.Threading.Tasks; using System.Web.Http.ExceptionHandling; namespace warehouse.management.api { public class Log4NetExceptionLogger : ExceptionLogger { private ILog log = LogManager.GetLogger(typeof(Log4NetExceptionLogger)); public async override Task LogAsync(ExceptionLoggerContext context, System.Threading.CancellationToken cancellationToken) { log.Error(“An unhandled exception occurred.”, context.Exception); […]