Tag: asp.net web api

Web API审核日志记录

我需要审核对我的Web API的日志调用,理想情况下我想使用属性,例如: [HttpPost, Auditing] public dynamic MyAPICall() Attribute应该能够在执行之前和之后拦截API调用,以便记录参数以及API调用运行多长时间。 使用MVC,我可以创建一个ActionFilterAttribute衍生物并覆盖OnActionExecuted和OnActionExecuting。 在Web API世界中是否可以等效?

REST服务身份validation

为REST apis实施身份validation的最佳实践是什么? 使用BASIC auth + SSL或类似http://tools.ietf.org/html/draft-hammer-http-token-auth-01 ? 是否有可用的现有解决方案(适用于.NET / WebApi)?

当URL中有尾随空格时,WebAPI路由404

使用默认的Web api路由 config.Routes.MapHttpRoute( name: “API Default”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); 和控制器 public class TestController : ApiController { [HttpGet] public HttpResponseMessage Get(string id) { return Request.CreateResponse(HttpStatusCode.OK, id); } } 请求’api/test/1′ 返回1 如果由于某种原因你向’api/test/1%20’发送请求 路线404的。 现在这个例子看起来很愚蠢,因为浏览器会修剪尾随空格,但是 对于’api/{controller}/{id}/{extrastuff}’这样的路线 ‘1 ‘的空格将转换为’1%20’并且在未找到的路线上请求将为404。

ASP.NET web api无法获得application / x-www-form-urlencoded HTTP POST

我是web-api的新手。 我想使用web-api接收HTTP POST数据。 内容类型是application/x-www-form-urlencoded ,请求正文如下: data={“mac”:”0004ED123456″,”model”:”SG6200NXL”} (JSON格式)。 我的控制器是这样的: public void Post([FromBody]string formData) { data.Add(formData); } 但是formData始终为null。 仅当我将请求正文更改为: ={“mac”:”0004ED123456″,”model”:”SG6200NXL”} 我可以找到{“mac”:”0004ED123456″,”model”:”SG6200NXL”}保存在我的formData字符串中。 所以我的问题是我应该如何接收格式的数据: data={“mac”:”0004ED123456″,”model”:”SG6200NXL”} ? 有没有一种简单的方法可以将JSON淡化为C#? 感谢帮助! 更新:我试图使用模型,但它仍然不适合我。 我的模型是: public class Device { public string mac { get; set; } public string model { get; set; } } 我的HTTP POST请求是: 标题: User-Agent: Fiddler Content-type: application/x-www-form-urlencoded Host: localhost:52154 Content-Length: […]

为什么这个web api控制器不兼容?

我有一个Web API控制器,里面有以下方法: public string Tester() { Thread.Sleep(2000); return “OK”; } 当我调用它10次(使用Fiddler)时,我希望所有10个调用在~2秒后返回。 然而,呼叫分别在2,4,8 …… 20秒后返回。 什么阻止它同时运行? 我该如何解决这个问题? 常规控制器的行为与web-api控制器相同吗?

unit testing/集成在Visual Studio 2013中使用HttpClient测试Web API

我很难用Visual Studio 2013测试我的API控制器。我的解决方案有一个Web API项目和一个测试项目。 在我的测试项目中,我有一个unit testing: [TestMethod] public void GetProduct() { HttpConfiguration config = new HttpConfiguration(); HttpServer _server = new HttpServer(config); var client = new HttpClient(_server); var request = new HttpRequestMessage { RequestUri = new Uri(“http://localhost:50892/api/product/hello”), Method = HttpMethod.Get }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); using (var response = client.SendAsync(request).Result) { Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var test = response.Content.ReadAsAsync().Result; } […]

通用Web Api控制器,支持任何模型

是否可以使用支持项目中任何模型的通用Web API? class BaseApiController :ApiController { private IRepository _repository; // inject repository public virtual IEnumerable GetAll() { return _repository.GetAll(); } public virtual T Get(int id) { return _repositry.Get(id); } public virtual void Post(T item) { _repository.Save(item); } // etc… } class FooApiController : BaseApiController { //.. } class BarApiController : BaseApiController { //.. } 这会是一个好方法吗? […]

.NET Web Api 2.1中Ninject绑定的无参数构造函数错误

目前正在编写API站点(.NET Web Api 2.1) 对于我们以前的API站点,我们使用了Ninject.MVC3包并手动连接了依赖项解析器和范围,并根据建议将我们的逻辑插入到NinjectWebCommon中。 这引起了我们的新项目的胃灼热与无参数构造函数错误。 在过去,这是一个死的赠品,我们没有正确地连接Web Api中的依赖性解析器。 只有这一次,我们是。 它就在那里。 var resolver = new NinjectDependencyResolver(kernel); GlobalConfiguration.Configuration.DependencyResolver = resolver; 所以我有点失落。 在上周,我看到Ninject已更新,WebAPI nuget包已复活,所以我决定尝试实施。 我安装了NuGet包Ninject.Web.WebApi(版本3.2)。 这似乎不包括应用绑定的NinectWebCommon.cs文件。 它只添加了必要的组件。 做一些挖掘我偶然发现了这个实现。 https://gist.github.com/odytrice/5842010 (我不清楚Nuget软件包是否正在为我做这个,这都是冗余代码。如果是这样,很好,我只需要了解如何使用nuget软件包添加我们的绑定。) 除了加载模块之外,我实现了这一行,我加载了三个单独的模块作为测试。 public static INinjectModule[] Modules { //get { return new INinjectModule[] { new MainModule() }; } get { return new INinjectModule[] { new GlobalModule(), new InventoryModule(), new StoreModule() […]

WCF服务或Web API

我将参与一个涉及许多元素的项目: ASP.NET MVC网站 C#控制台应用程序 iPhone应用程序 为了使所有这些单独的应用程序与数据库通信,我的直接想法是使用WCF服务。 但是,我现在需要向站点添加API以允许第三方从他们自己的应用程序中选择,插入和更新记录。 在我看来,我只想在我的WCF服务上创建一个单独的RESTful服务端点,该端点将使用身份validation锁定,并且只能访问某些方法。 但是,我今天一直在阅读MVC 4中的Web APIfunction,这是RESTful API的最新function吗? 我是否应该继续使用Web API? 或者因为我的其他应用程序需要Web服务,我应该坚持使用WCF服务吗?

ASP.NET Web API和类

我有一个标有[Serializable]的类。 当我从Web API返回它时,字段名称都很时髦。 通常返回的JSON是 [{“OrderId”:797 … 使用[Serializable]时返回JSON [{“k__BackingField”:797 … 我不想将其标记为可序列化以使用BinaryFormatter进行缓存。 除了编写自定义序列化程序或制作一个不可序列化的双胞胎类并编写猴子代码以在两者之间“施放”之外,还有其他方法吗?