Tag: asp.net web api

将对象序列化为已包含一个JSON属性的JSON

为了提高性能,我将一个更大的操作结果作为JSON缓存在一个表中 – 与一个键列一起确定要返回哪一行。 所以数据看起来像这样: Id Json —- ——— 1 {“property”: “data”, “…”: “…”} 2 {“property”: “data”, “…”: “…”} 因此,我检索的对象具有int .Id和string .Json属性。 当使用Id返回这样的对象时,我首先需要反序列化JSON – 以便正确地重新序列化。 如果我不首先反序列化它,我最终得到一个带引号的字符串,即我的返回对象看起来像这样 { “id”: 1, “json”: “{\”property\”: \”data\”, … } 相反,我需要: { “id”: 1, “json”: { “property”: “data”, … } } 有没有办法“告诉”Json.Net序列化.Json直接输出.Json属性而不进行序列化 – 同时序列化其他属性?

WebAPI / Owin – 登录后未授权身份

我正在使用WebAPI / Owin 3.0实现简单的登录/密码身份validation。 这是我的配置方法: public void ConfigureAuth(IAppBuilder app) { // Configure the db context and user manager to use a single instance per request app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString(“/#sign-in”) }); } 这是Login方法 [Authorize] [RoutePrefix(“api/Account”)] public class AccountController : ApiController { [AllowAnonymous] [Route(“Login”)] public async Task Login(LoginBindingModel login) […]

Web Api错误地反序列化枚举列表

所以,我正在使用Web API控制器来接受JSON请求。 它映射到包含枚举列表的模型对象。 我遇到的问题是,如果JSON包含无效值,它似乎没有正确反序列化。 我希望将无效值映射到我的枚举列表中的0值类型,但这不会发生。 我已经分离出3个主要案例:如果JSON的forms是 … “MyEnumList”:[“IncorrectEnum”, “One”, “Two”] … 该值根本没有映射,我只是得到一个包含两个有效值的列表。 但是,如果我提供此JSON: … “MyEnumList”:[“123”, “One”, “Two”] … 我得到一个包含3个对象的列表,其中第一个对象的类型为“MyEnum”,其值为123,即使在我的枚举中没有定义。 如果我提供此JSON语法,也会发生同样的情况: … “MyEnumList”:[123, “One”, “Two”] … 任何人都可以解释这里发生了什么,以及如何确保值始终映射到有效类型? 供参考,模型对象,包含我的枚举列表: public class MyClass { public List MyEnumList { get; set; } } 和简单的枚举: public enum myEnum { Zero = 0, One = 1, Two = 2 }

获取连接到C#.NET WebAPI应用程序的客户端的IP地址

我试过了: private const string HttpContext = “MS_HttpContext”; private const string RemoteEndpointMessage = “System.ServiceModel.Channels.RemoteEndpointMessageProperty”; public static string GetClientIpAddress(HttpRequestMessage request) { if (request.Properties.ContainsKey(HttpContext)) { dynamic ctx = request.Properties[HttpContext]; if (ctx != null) { return ctx.Request.UserHostAddress; } } if (request.Properties.ContainsKey(RemoteEndpointMessage)) { dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage]; if (remoteEndpoint != null) { return remoteEndpoint.Address; } } return null; } 根据: […]

Unity.WebApi | 确保控制器具有无参数的公共构造函数

我在ASP.NET WebApi解决方案中使用Unity.WebApi NuGet包(Unity 4.0.1和Unity.WebApi 5.2.3)。 我面临的问题是,在尝试运行代码时,我收到错误: Make sure that the controller has a parameterless public constructor 。 我在这里搜索过类似的post,但我找不到任何符合我问题的post。 请不要只说“添加无参数构造函数”,因为它显示您显然不知道IoC是什么以及为什么该语句完全没有意义并且违背了IoC的目的。 我之所以这么说,是因为我在迄今为止看过的很多其他主题中看到了这一点。 这是我的Startup.cs(我正在使用Owin,所以我没有Global.asax): public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); // Registering unity stuff UnityConfig.RegisterComponents(); app.UseWebApi(config); } 这是我的UnityConfig.cs: public static class UnityConfig { public static void RegisterComponents() { var container = new UnityContainer(); […]

Web API OData:您如何在单个实体上进行扩展?

我已经多次阅读这 两篇文章 ,试图找出在单个实体上使用$expand查询选项的方法,但是在我尝试过的每一种方式中,我似乎都无法做到这行得通。 所有其他查询选项都有效, $expand目前也适用于收集结果。 模型 :玩家实体具有名为Stats的导航属性,其中每个对象包含给定年份的该玩家的统计数据。 我用这种方式设置了OData: config.EnableQuerySupport(); ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntitySet(“OPlayer”); modelBuilder.EntitySet(“OPlayerStats”); Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel(); config.Routes.MapODataRoute(“ODataRoute”, “odata”, model); 最初,我以这种方式设置了我的控制器: public class OPlayerController : EntitySetController { private readonly DatabaseContext _db = new DatabaseContext(); protected override Player GetEntityByKey(int key) { return _db.Players.FirstOrDefault(p => p.PlayerId == key); } public override IQueryable Get() { […]

XmlSerializer忽略WebApi中的

我有一个返回一个简单对象的WebApi,但当我强制它以XML格式返回( Accept: application/xml )时,它忽略了我在对象上设置的[XmlAttribute]属性。 这是我的目标: public class Foo { [XmlAttribute] public string Bar { get; set; } } 我在代码中将其返回: [RoutePrefix(“api/mytest”)] public class MyTestController : System.Web.Http.ApiController { [HttpGet] [Route(“gettest”)] public Foo GetTest() { return new Foo() { Bar = “foobar” }; } } 生成的XML是: foobar 而我希望它会像这样返回: 为什么WebApi使用的XmlSerializer忽略[XmlAttribute]属性,如何让它像我想的那样工作?

App_Global.asax.compiled和App_Global.asax.dll丢失了吗? WebApi .NET 4.5项目

在我们使用WebAPI构建“简单”API的冒险过程中,我们已经像任何项目一样拥有了相当多的问题,但是我无法找到任何可以解释以下行为的资源: 细节 : Visual Studio 2013 with Update 2(但是,在更新之前,这是相同的) Windows Server 2008 R2 Web API 5.1.2 该问题似乎与“发布”命令有关,特别是“预编译”选项。 通过IIS Express运行时,我们看不到任何问题。 如果我们发布一次,则无法在bin目录中包含App_Global.asax.compiled和App_Global.asax.dll。 如果它正在更新应用程序的现有实例,它实际上将删除现有的两个文件。 注意:无论WebPublish或FileSystem Publish如何,都会发生这种情况 加载到IIS时,此行为导致404.0错误,而不是我们预期的201。 但是,如果我第二次发布没有更改以前的配置文件/配置,它会添加两个。 有一段时间,我们认为这是权限问题,并没有看到一致的行为。 这种情况发生在具有相同行为的所有开发机器上。 我们已经看到有关神秘行为的post,但从我们的分析来看,这是问题的根源。

在自托管WebApi中获取HttpRequest上下文

如何从自托管的MVC WebAPI访问查询字符串? 使用NRE调用以下失败,因为Current为空(aka。null) System.Web.HttpContext.Current.Request[“myQuery”] 我需要访问控制器外部的当前上下文,因为我想通过控制我的对象实例化。 DI。 例如。 container .RegisterType( new InjectionFactory( uc => new MyObject( System.Web.HttpContext.Current.Request[“myParam”]) //This failed. )); 由于上面的NRE,从ControllerApi代码内部调用container.Resolve()失败。

我可以在ASP.Net Web API控制器中使用多个Get方法

我想为Ex实现多个Get方法: 获取(int id,User userObj)和Get(int storeId,User userObj) 是否可以像这样实现,我不想更改操作方法名称,因为在这种情况下我需要在URL中键入操作名称。 我正在考虑通过这个样本格式’ // localhost:2342 / ‘来执行操作方法,该格式不包含操作方法名称。