Articles of asp.net web api

使用Directory.Delete()和Directory.CreateDirectory()覆盖文件夹

在我的WebApi操作方法中,我想使用以下代码创建/覆盖文件夹: string myDir = “…”; if(Directory.Exists(myDir)) { Directory.Delete(myDir, true); } Directory.CreateDirectory(myDir); // 1 – Check the dir Debug.WriteLine(“Double check if the Dir is created: ” + Directory.Exists(myDir)); // Some other stuff here… // 2 – Check the dir again Debug.WriteLine(“Check again if the Dir still exists: ” + Directory.Exists(myDir)); 问题 奇怪的是,有时在创建目录后,该目录不存在! 有时第一次检查目录时(数字1是); Directory.Exist()返回true ,其他时间返回false 。 […]

从Web APIurl中删除“api”前缀

我有一个API控制器 public class MyController : ApiController { … } 默认情况下,它映射到URL mysite/api/My/Method ,我希望它没有“api”前缀的URL: mysite/My/Method 设置控制器属性[RoutePrefix(“”)]对我没有帮助。 有没有其他方法可以实现这一目标?

安装CORS后无法加载文件

我使用所有默认值在VS Express 2013中创建了一个基本的ASP.NET Web Api应用程序。 我添加了一个控制器,它就像我想要的那样返回XML。 一旦我安装CORS包: Install-Package Microsoft.AspNet.WebApi.Cors -Pre 我甚至不能再运行该应用程序了: An exception of type ‘System.IO.FileLoadException’ occurred in mscorlib.dll and wasn’t handled before a managed/native boundary Additional information: Could not load file or assembly ‘System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception […]

为什么只有在我打开Fiddler时才能在ASP.NET中调用API?

我在我的索引控制器中调用这样的API,一切正常,只有我打开Fiddler。 public ActionResult Index() { Base model = null; var client = new HttpClient(); var task = client.GetAsync( “http://example.api.com/users/john/profile”) .ContinueWith((taskwithresponse) => { var response = taskwithresponse.Result; var readtask = response.Content.ReadAsAsync(); readtask.Wait(); model = readtask.Result; }); task.Wait(); return View(model); } 如果我关闭Fiddler我会收到以下错误: 无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8888 是否有一些我必须包含的配置,以便调用API工作,即使我没有Fiddler打开。

WebAPI令牌颁发授权

我目前正在使用Sessions并重写AuthorizeAttribute来管理由MVC Web应用程序使用的WebAPI端点的授权。 我被告知发行令牌是管理用户和角色的最佳方式。 我想要了解的是: 为什么它比使用会话更好? 有人可以提供一个好的(简单)示例,说明如何在用户使用WebAPI端点登录时发出令牌,以及如何在发出令牌后使用/跟踪令牌。 我一直在研究OWIN和其他一些东西,我很难找到一个如何工作的好例子。

使用OWIN的Websockets

到目前为止我在网络api上使用Microsoft WebSockets的所有示例都使用IIS,实现是在get方法上将HTTP连接升级为websocket,并将websocket处理程序的实例传递给HTTPContext public HttpResponseMessage Get() { if (HttpContext.Current.IsWebSocketRequest) { var noteHandler = new NoteSocketHandler(); HttpContext.Current.AcceptWebSocketRequest(noteHandler); } return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols); } 我想要实现的是在OWIN管道上做同样的事情。 我面临的问题是连接正在升级以使用Websockets,但它没有使用我的websocket处理程序。 我哪里错了? 请建议。 使用OwinContext的控制器(遵循Nancy使用OWIN的示例WebSockets ), public HttpResponseMessage Get() { IOwinContext owinContext = Request.GetOwinContext(); WebSocketAccept acceptToken = owinContext.Get(“websocket.Accept”); if (acceptToken != null) { var requestHeaders = GetValue<IDictionary>(owinContext.Environment, “owin.RequestHeaders”); Dictionary acceptOptions = null; string[] subProtocols; if […]

有没有为WebAPI项目生成C#HTTPClient包装器的方法?

在即将开展的项目中,我们希望使用ASP.NET WebAPI 2向我们的网站和浏览器客户端公开服务function。 由于我们希望尽可能少的“终点”尽可能地让所有呼叫,甚至“内部”从WebAPI Web服务中消耗我们的服务器。 (即不只是直接新建控制器实例) 我正在寻找帮助生成或支持C#“客户端”的东西,它包装HTTPClient并提供强类型的“代理”。 与通过“添加新服务引用”生成代理时的WCF类似。 我已经阅读了其他类似问题的问题(如此处所见),但想要提出一个与MVC或测试问题无关的更直接的问题。

在包含Controllers和ApiControllers的项目中从ApiController和Action名称获取Url

现有项目具有从以下任一项inheritance的控制器: Controller : RouteTable.Routes.MapRoute with “{controller}/{action}/{id}” 。 ApiController : GlobalConfiguration.Configure和回调MapRoute中的”api/{controller}/{id}” 。 一切正常,但我需要在这两种类型的控制器中生成动作方法的URL。 鉴于: 从这些中的任何一个inheritance的控制器的名称或类型 动作方法名称 然后从网站方面,我如何为Web API方面生成正确的URL? 我正在使用reflection来获取动作和控制器名称,然后通过使用UrlHelper.Action(actionName, controllerName, routeValueDictionary)获取网站路由的正确URL。 但是,这种方法(当然)为WebAPI端生成这样的URL: /ApiControllerName/Get?parameter1=value当需要/api/ApiControllerName?parameter1=value以及单独知道它是GET请求时。 目的:这是针对网站的烟雾测试页面,该页面使用属性和reflection来决定吸烟测试的内容。 能够在整个项目中使用相同的属性会很好,而且能够使用知道路由表的正确UrlHelper并且可以生成正确的前缀(如/api/ ,这将是非常好的,而不是代码假设,也许是错误的,API路由是用api注册的,而不是webapi 。 更新 在继续研究之后,我找到了可以生成WebAPI URL 的Url.HttpRouteUrl方法 ,但这需要知道路由名称,而不是操作方法名称。 我已经对此做了更多的研究,并且没有更接近解决方案。 看起来如果你知道相应路线的路线名称, 你可以轻松地制作一个Url 。 这里和这里也有一些可能的提示。 但是,如果有多个WebApi路由,您如何知道哪一个与您想要的控制器和操作相匹配? 重新实现MVC本身在选择控制器和动作方面已经做的事情是愚蠢的。 我想我可以使用每个WebApi路由从给定参数构造一个URL,然后通过它的步调运行URL(使用上面的一些链接)并查看它是否与所需的控制器匹配… yuck。 必须有一个更简单的方法。 现在我将继续前进,但是希望有人可以帮助我。

config.MapODataServiceRoute错误

我目前正在关注本指南 – > 链接到asp.net网站 正如指南所说,我通过nuget控制台添加了所有必需的软件包,并将必要的使用添加到WebApIConfig文件中。 。 但是当我添加端点寄存器方法VS给了我一个错误。 我添加的方法: public static void Register(HttpConfiguration config) { // New code: ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet(“Products”); config.MapODataServiceRoute( routeName: “ODataRoute”, routePrefix: null, model: builder.GetEdmModel()); } 错误VS给了我: Error 1 ‘System.Web.Http.HttpConfiguration’ does not contain a definition for ‘MapODataServiceRoute’ and no extension method ‘MapODataServiceRoute’ accepting a first argument of type ‘System.Web.Http.HttpConfiguration’ could […]

如何定义路由中的PUT方法仅限于没有参数的控制器中的Put方法?

以下是WebApiConfig.cs中的路由配置: config.Routes.MapHttpRoute( name: “DefaultApiPut”, routeTemplate: “api/{controller}”, defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) } ); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Post, HttpMethod.Delete) } ); 这是我的控制器: public class MyController : ApiController { [HttpPut] public void Put() { //blah } } 不知何故,当客户端使用URL /api/myController/12345发出PUT请求时,它仍然映射到MyController的Put方法,我预计会出现类似资源的错误。 如何强制Put方法只接受没有参数的请求? 提前致谢!