Tag: asp.net web api

如何从ClaimsPrinciple中删除现有声明?

我正在制作一个开发人员工具,用于模拟Intranet站点的Roles ,以允许开发人员根据需要快速充当任何Role 。 定义的角色是Developer, Team Lead, Team Member, Engineering, Marketing, Guest和网页上的工具调用Web Api来添加或删除Claim …我可以添加但似乎无法找到可以访问.RemoveClaim(claim)或.TryRemoveClaim(claim)以获得此function。 我是否必须创建自定义声明管理器才能获得此function,或者我是否遗漏了某些内容? 我一直在关注System.Security.Claims ,几乎所有其他东西似乎都非常简单,并且没有任何参考需要大量工作来完成我需要的工作。 我在.NET 4.5.1中使用VS 2013 / Web Api2。 网站方面只是使用简单的ajax调用PUT和DELETEfunction,直到我按照我想要的方式工作。 从Controller,我的cs代码如下: public void Put(int id, [FromBody]string role) { if (FindClaim(role) != null) return; var user = HttpContext.Current.User as ClaimsPrincipal; if (user == null) return; var claimId = new ClaimsIdentity(); claimId.AddClaim(new Claim(ClaimTypes.Role, role)); […]

向ASP.NET Web API Controller添加显式操作路由

我有一个带有ApiController的ASP.NET Web API项目,它为User端点提供以下操作: GET /api/User POST /api/User DELETE /api/user 我想提供以下端点: GET /api/user/metrics 但是,当我像这样定义控制器动作时: [HttpGet] public HttpResponseMessage Metrics() { return null; } 我Multiple actions were found that match the request错误消息的Multiple actions were found that match the request 。 我理解这违反了“纯”REST API的定义,但这就是我想要的方式。 我想我必须通过映射HTTP路由来解决这个问题,但是我尝试了一些路由,但是我无法让它工作。 我的路线应该是什么样的?

unit testingC#

我是unit testingC#Web API控制器 – 每个都需要几个参数来初始化。 我现在在每个测试中都有这个代码,但它非常笨重。 如何将此代码放入[TestInitialize]以便在每次测试之前运行? 我尝试了以下但显然它超出了测试方法的范围。 [TestInitialize] public void TestInitialize() { APIContext apicon = new APIContext(); xRepository xRep = new xRepository(apicon); var controller = new relevantController(cRep); controller.Request = new HttpRequestMessage(); controller.Configuration = new HttpConfiguration(); relevantFactoryModel update = new relevantFactoryModel(); } 谢谢

在MVC Web Api 4 Beta中从Json中删除Null属性

我正在序列化对象并从我的Web服务返回json。 但是,我试图从序列化的json中省略null属性。 有没有办法做到这一点? 我正在使用Web Api MVC 4 beta。

具有非主键值的FindAsync

public class Foo { public int Id { get; set; } public int UserId { get; set; } } 这似乎是异步执行此操作的方法: DatabaseContext db = new DatabaseContext(); Foo foo = await db.Foos.FindAsync(fooid); 如何根据UserId的值异步获取特定用户的所有Foos?

将OData Queryable与存储库一起使用?

我有这个存储库方法: public IQueryable GetAll() { using (var context = new DatabaseContext()) { return context.Set().AsQueryable(); } } 无论如何, TModel是一个艺术家模型 然后我在我的控制器中执行此操作: // GET api/artist [Queryable] public IQueryable Get() { return _repo.GetAll().AsQueryable(); } 现在..如果我要更改存储库方法以返回List并为我的结果添加.ToList ..那么这将很有效。 但是无论OData查询是什么,我都会首先执行“获取所有查询”…将它们转换为列表,然后我将针对该列表执行我的OData查询。 这似乎是完全错误的..我想要做的是确保OData查询在我尝试从数据库中获取数据的同时执行..所以我只得到与查询匹配的非常具体的结果..而不是后来被查询的大量数据.. 现在我有问题, DbContext在使用之外被处理掉了..但是我仍然需要关闭DbContext以及一些地方,一些如何… 有任何想法吗?

无法反序列化当前的JSON对象,为什么?

我正在尝试使用WebApi从我的数据库中获取Employees列表,使用此代码:这是我的客户端MVC应用程序的代码: string u = “http://localhost:1411/api/EmployeeAPI”; Uri uri = new Uri(u); HttpClient httpClient = new HttpClient(); Task response = httpClient.GetAsync(uri); Task.WaitAll(response); HttpResponseMessage resposta = response.Result; var msg = resposta.Content.ReadAsStringAsync().Result; Employee[] employees = JsonConvert.DeserializeObject(msg); return View(employees); 这是我的WebAPI的代码: public IEnumerable GetEmployees() { return db.Employees.AsEnumerable(); } 但是这个错误不断出现,我无法理解为什么: 无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“DataAccess.Employee []”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径’消息’,第1行,第11位。 我的员工类: namespace DataAccess { using System; using […]

ASP.NET WebApi不接收post数据

我需要使用WebApi接收一些字符串和二进制数据。 我用这种方式创建了一个控制器: [HttpPost] public void Post(byte[] buffer) { // Some code goes here } 这是溃败: routes.MapHttpRoute( name: “CuscarD95B”, routeTemplate: “D95B/{controller}”, defaults: new { buffer = RouteParameter.Optional }, constraints: new { controller = @”Cuscar” } 现在,当我尝试发布一些数据时,缓冲区总是byte [0](零长度数组)。 没有数据传递给控制器​​。 任何帮助,将不胜感激。 谢谢。

在Web API中的id参数之后使用操作进行路由

在web api中,默认路由是: /api/locations/123?days=5 config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); 但是,如果我希望路径看起来像这样/api/locations/123/events?days=5同时仍然可以使用类似这样的路径命中LocationsController /api/locations/123?state=md 控制器: public class LocationsController : ApiController { // GET api/locations/123/events?days=5 public IEnumerable GetEventsByDays(int idLocation, int days) { // do stuff } // GET api/locations/123?state=md public IEnumerable GetLocationsByState(string state) { // do stuff } } 这里真的有两个问题: 有一个返回事件的LocationsController或者是否应该有一个完全独立的控制器是否有意义? 如何设置WebApiConfig的路由以允许这样的路由?

CamelCase JSON WebAPI子对象(嵌套对象,子对象)

我正在创建一个带有子项(嵌套对象)的复杂对象,以便从我的web api控制器返回。 该对象包含其他对象类型的列表。 列表中的这些子对象类型遵循.NET中使用的pascal大小写。 var persons = peopleLookup.Values; var users = userLookup.Values; var roles = rolesLookup.Values; var groups = groupLookup.Values; var roleAssignments = roleAssignmentLookup.Values; var groupMembers = groupMemberLookup.Values; return new { persons, users, roles, roleAssignments, groups, groupMembers }; 我的问题是WebAPI没有驼峰的子项的每个属性。 例如,人员列表中的第一个人应该具有id,name的属性,而不是Id,Name的.NET pascal案例。 同样适用于所有其他子项。