Tag: asp.net web api

WebApi将主体绑定到Json字典

我正在尝试使用以下签名创建WebApi操作方法: [System.Web.Http.HttpPost] public object Execute([FromUri] string command, [FromUri] string method, [FromBody] IDictionary arguments) 但是,当我使用请求命中此方法时,参数永远不会正确绑定(两个URI字段可以)。 ModelState在第一个字符处显示Json.NET解析错误。 我尝试过看起来像: id=50和arguments={ “id”: 50 }请求主体。 如何制定我的请求以允许WebApi正确绑定我的参数?

如何在不知道Key值的情况下读取Json数据

我有一个json数据作为输入字符串。 现在我需要用输入的Json数据更新现有的Json数据。 在我的例子中,我希望遍历每个键并与现有的Json数据匹配,然后使用输入的Json数据更新该Key的值 。 用于检索现有数据的代码 var existingJSon = ProductRepository.ListOfProd.Cast().Where(x => x[“ProdId”].ToString() == id.ToString()); 检索数据后,我现有的Json将如下所示。 { ProdId:”1″, Title:”C#”, Author:”Jeffy”, Publisher:”XYZ”, Category:”Microsoft” } 现在我需要遍历作为输入的每个键并匹配现有的Json键并更新该键的值。 输入和更新后它应如下所示: { ProdId:”1″, Title:”C#”, Author:”Jeffy”, Publisher:”abcd”, Category:”Microsfot Basic .Net Development Kit” }

来自另一个类库的基本控制器在web api中不起作用

我有两个Web API项目,我有一个MarketController ,我需要扩展Api控制器,所以我做到了。 我创建了一个BaseController类,并inheritance自ApiController如下所示: public class BaseController:ApiController { } 到目前为止一切顺利,它运作良好: public class MarketController : BaseController { public MarketController() : base() { } // GET api/ public IEnumerable Get() { return new string[] { “value1”, “value2” }; } } 但我想在另一个名为BLL类库中执行此操作,因此我将BaseController类移动到BLL类库,并在Web API项目中引用它。 当我这样做时,api停止了工作。 回应是: { “Message”: “No HTTP resource was found that matches the request URI someurl/api/market.”, […]

Web api – 如何使用slugs进行路由?

我希望能够解析像这样的问题的链接: http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs 因此,服务器上的路由只是忽略 URL的最后部分。 作为使用这个问题的一个例子,如果有人输入这样的URL,我怎样才能正确实现路由,它将我重定向到: http://stackoverflow.com/questions/31223512

为什么在控制器上下文之外获取路由值如此困难?

我不明白这背后的交易是什么,为什么在控制器的Request中获取路由值如此容易,但几乎不可能在HttpContext.Current.Request上做同样的事情? 也许我只是不知道更好的方式而且存在。 有人可以确认这是获取控制器外部路径数据的唯一方法吗? 例 [Route(“{id}”), HttpGet] public IHttpActionResult Test() { // Simple and easy var route1 = Request.GetRouteData().Values[“id”]; // Wat. This is also ~6 times slower var routeValues = (IHttpRouteData[]) HttpContext.Current.Request.RequestContext.RouteData.Values[“MS_SubRoutes”]; var route2 = routeValues.SelectMany(x => x.Values).Where(x => x.Key == “id”).Select(x => x.Value).FirstOrDefault(); return Ok(route1 == route2); // true }

HttpClient调用Windows-Authenication ApiController方法…但没有WindowsIdentity出现

当api-controller使用windows-authentication时,我的api控制器是否有办法获得启动api控制器调用的帐户的IIdentity? 我的“castController.User.Identity”是(类型)WindowsIdentity。 但它是“空的”。 空,原样:IsAuthenticated = false,以及一个空的UserName。 它不是空的,它是“空的”。 我的“WebTier”是一个运行自定义AppPool的IIS应用程序,运行自定义AppPool的IIdentity类似于“mydomain \ myServiceAccount”。 我正在尝试将“castController.User.Identity.Name”值作为此服务帐户。 (我想这可能是任何能够使用有效的Windows帐户连接到我的WebApiTier的客户端,但我提到这个以防万一它可能会抛出一个奇怪的猴子扳手) 我的“WebTier”(Mvc Application)有这样的方法: 你会注意到我使用UseDefaultCredentials的两种方法。 (阿卡,我一直试图解决这个问题) private async Task ExecuteProxy(string url) { HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = true }; handler.PreAuthenticate = true; WebRequestHandler webRequestHandler = new WebRequestHandler(); webRequestHandler.UseDefaultCredentials = true; webRequestHandler.AllowPipelining = true; webRequestHandler.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired; webRequestHandler.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification; using (var client […]

ASP.NET Web API序列化JSON错误:“自我引用循环”

与这一次长期斗争。 我正在使用ASP.NET Web API来提供与数据库的简洁HTTP / JSON交互。 我有一个实体名称Reservation with,如下所示: // Reservation public class Reservation { public int ID { get; set; } // ID (Primary key) public int EquipmentID { get; set; } // EquipmentID public string Username { get; set; } // Username public DateTime BeginDateTime { get; set; } // BeginDateTime public int? Duration […]

使用Simple Injector将依赖项注入OWIN Middleware和每个Web请求

我试图找出如何最好地将我的所有依赖项注入我为Web API应用程序编写的自定义OWIN中间件。 一个简单的例子就是我正在使用的DbContext。 我有一些中间件需要根据请求进行潜在查询。 我遇到的问题是我希望我的DbContext具有WebApiRequestLifestyle范围。 我的DbContext注册如下: container.Register(Lifestyle.Scoped); 显然,这不起作用: container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle(); 因为我需要在我的中间件中使用MobileDbContext,例如: app.CreatePerOwinContext(() => { return container.GetInstance(); }; 我尝试了一种混合生活方式,但这也没有用,因为我不认为中间件在技术上是不属于“范围”生活方式的东西。 我想,它可能更接近单身人士。 有没有更好的方法来设计我的应用程序,以避免这个问题或通过某种自定义范围的生活方式解决它?

.NET WebAPI集中授权

在.NET WebAPI中,我创建了一种方法,将所有授权规则放在一个中心位置,而不是分散在整个控制器中。 我很好奇为什么这种集中化不会更频繁地进行; 有没有影响/安全问题? 我目前的方法是在App_Start期间创建一个包含所有授权数据的Dictionary,然后使用DelegatingHandler来应用限制(下面的代码)。 字典键是Controller和Action的元组,值是授权角色。 DelegatingHandler绑定到WebAPI的路由配置以获取调用哪个控制器,然后使用Dictionary来确定是否允许该请求。 字典: var authorizations = new Dictionary<Tuple, string>(); authorizations.Add(new Tuple(“values”, “get”), “public”); authorizations.Add(new Tuple(“values”, “put”), “private”); DelegatingHandler: public class SecurityDelegateHandler : DelegatingHandler { private readonly Dictionary<Tuple, string> _authorizations; public SecurityDelegateHandler(Dictionary<Tuple, string> auth) { _authorizations = auth; } protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var config = GlobalConfiguration.Configuration; […]

自动测试ApiController

我有一个ApiController并希望通过包括路由在内的unit testing进行测试。 一个例子: [RoutePrefix(“prefix”)] public class Controller : ApiController { [HttpGet] [Route(“{id1}”)] public int Add(int id1, [FromUri] int id2) { return id1 + id2; } } 我现在想测试这种方法。 我明白了,我可以像普通方法一样测试它。 但我还想通过将URL转换为方法参数来测试它。 基本上我想有一个自动测试,我调用一个像prefix/10?id2=5的URL,得到15的结果。这有可能吗?