Tag: asp.net web api

使用asp.net webapi实现oData inlinecount

可能重复: 使用WebApi进行OData分页($ inlinecount) 由于Asp.net WebAPi几乎支持odata,因此我非常喜欢让$ inlinecount工作,以便它与kendo ui(或任何其他)很好地协作。 因此它以jsonp格式返回值,我实现了一个新的MediaFormatter(来自Stackoverflow)。 麻烦的是它需要结果才能在其中包含count元素以使服务器端分页工作,所以现在我攻击了格式化程序以获得虚假计数。 这一切都很好,并且网格都很开心,但是真正的计数是一个挑战,因为返回的IQueryable表达式已经应用了filter/ Take等。 public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) { string callback; if (IsJsonpCountableRequest(out callback)) { return Task.Factory.StartNew(() => { var q = value as IQueryable; var count = q.Count(); // this count doesnt return the actual count var writer […]

如何在c#中检索字符串formData js

我必须在.net中的web api中检索“idPerson”的值。 我已经检索到文件“UploadedImage”。 但我无法检索“idPerson”的值。 有人有解决方案吗? 谢谢 ! 我的jsfunction /** * Upload de l’image de profil * @method uploadFile * @private */ uploadFile: function () { var data = new FormData(), files, ajaxRequest; files = $(“#fileUpload”).get(0).files; // Ajout de l’image uploadé vers les données du form if (files.length > 0) { data.append(“UploadedImage”, files[0]); // Ajout de […]

Asp.net Web Api重定向请求

我有一个Asp.net Web API项目,它有几种CRUD方法。 在这些方法之上,我想添加一个Authorization服务,该服务读取Authorization标头并阻止用户访问资源(如果他们未经授权)。 // Method on internal IP Project public class InternalController : ApiController { public void Create(CreateRequest request) { // implement the method } } // Method on public IP Project public class ExternalController : ApiController { public async Task Create(CreateRequest request) { // validate Authorization header and throw exception if not valid […]

如何在.Net中优雅地关闭双向WebSocket

我有一个WebSocket服务器,它接受来自客户端的二进制数据流,并响应每4MB读取的另一个文本数据流。 服务器使用IIS 8和asp.net web api 。 服务器 public class WebSocketController : ApiController { public HttpResponseMessage Get() { if (!HttpContext.Current.IsWebSocketRequest) { return new HttpResponseMessage(HttpStatusCode.BadRequest); } HttpContext.Current.AcceptWebSocketRequest(async (context) => { try { WebSocket socket = context.WebSocket; byte[] requestBuffer = new byte[4194304]; int offset = 0; while (socket.State == WebSocketState.Open) { var requestSegment = new ArraySegment(requestBuffer, offset, requestBuffer.Length […]

防止在.NET Azure Web Api中使用PATCH覆盖某些字段

我正在创建一个带有.NET后端的Azure移动服务,它使用TableController(ApiController的子类)来处理REST请求。 在我的PATCH方法中,我想限制允许更新的字段集。 我有一个AccountController,我不希望覆盖Username和UserId字段。 public class AccountController : TableController { … // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 public Task PatchAccount(string id, Delta patch) { return UpdateAsync(id, patch); } … } 我想发回一个有意义的HTTP响应,如403: Forbidden或类似的,如果连接到API的客户端试图更新用户名或userId。 所以我需要一些方法来了解Delta补丁的内容或在更新’禁用’字段时有自动响应。

将Firebird连接到ASP.net WebAPI项目

我正在学习ASP.net,特别是WebAPI和MVC。 我正在使用Visual Studio Community 2013,.NET 4.5和C#。 我是一个全新的,所以我实际上正在通过这个特定的演练来了解事情是如何工作的: http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api 到目前为止一切正常,但我想继续连接数据库以填充我的数据集。 我非常熟悉使用Firebird并能够将Firebird安装为数据提供者(通过NuGet并安装相应的DDEX文件)。 不幸的是,我很难理解如何查询数据库并填充我的数组。 基本上,这就是我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using FirebirdSql.Data.FirebirdClient; using System.Configuration; using System.Collections; namespace NBAPoolWebService.Controllers { public class UserController : ApiController { User[] users = new User[] { new User { ID = 1, CREATED=new DateTime(2011, 1, 12), […]

列出多个组下的API方法

我有Swashbuckle带注释的代码,如下所示: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] public class AddressesController : Controller { [HttpGet(“{aid}”)] [SwaggerResponse(HttpStatusCode.OK, Type = typeof(PostalRecord))] public async Task GetAddress(Guid id, Guid aid) { //do something } 我想使用GroupActionsBy自定义,如本例所示 ,但我希望将上面的GetAddress方法同时包含在两个独立的组中,这些组对应于显示的两个路由前缀: [Route(“api/Subscribers/{id}/[controller]”)] [Route(“api/Organizations/{id}/[controller]”)] 换句话说,我希望在两者下列出相同的方法: 认购 组织 如何才能做到这一点? 顺便说一下,我正在使用ASP.NET Core( dnx46 )。 如果还不能使用Swashbucklee的ASP.NET核心版本执行此操作,那么仍然可以欣赏完整的CLR(Web API 2.2?)示例。 另外,关于我正在尝试做的更完整的故事 – 我有一个单独的SOpost 。 更新 @venerik给出的答案让我接近解决方案。 当我申请他的示例代码时…… [SwaggerOperation(Tags = new []{“Subscribers”, “Organizations”})] …这导致Swagger列表看起来像这样: 简而言之,“地址”端点现在出现在我想要的标题下,但是,正如红色箭头所示,它们现在也被“交叉列出”; 我不希望“订户”端点列在“组织”端点下。 […]

Web API:使用不同HTTP谓词的相同方法

在WEB API控制器中,我们可以使用不同的HTTP谓词具有相同的方法名称吗? [HttpGet] public string Test() { return “Success Get”; } [HttpPost] public string Test(int i) { return “Success Post”; } Swagger不接受此配置。 访问API方法时出现此错误: 500:“消息”:“发生错误。”,“ExceptionMessage”:“Swagger 2.0不支持:路径’api / Common’和方法’POST’的多个操作。请参阅配置设置 – \”ResolveConflictingActions \“一个潜在的解决方法“ 这是我的routeconfig : config.Routes.MapHttpRoute( name: “DefaultApiByName”, routeTemplate: “api/{controller}/{action}/{name}”, defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: “DefaultApiByAction”, routeTemplate: “api/{controller}/{action}” ); config.Routes.MapHttpRoute(“DefaultApi”, “api/{controller}/{id}”, new { […]

从Service Fabric WebAPI控制器写入ServiceEventSource

在我的有状态服务中,我可以通过调用以下方法写入ServiceEventSource : ServiceEventSource.Current.ServiceMessage(this.Context, “this is my log message”); 有谁知道如何在我的无状态WebAPI控制器中进行相同的调用? 好像我无法将上下文输入控制器。 我注意到它只在我的OwinCommunicationListener可用。 基本上,我希望能够像这样记录我的控制器: public async Task Get(string id) { ServiceEventSource.Current.ServiceMessage(this.Context, “this is my log message”); //Do something return Ok(100); }

Url.Link无法在WebAPI中使用

使用下面的unit testing..我试图测试我的webapi。 [Test] public void CheckControllerForCreate() { var config = new HttpConfiguration(); config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; var request = new HttpRequestMessage(HttpMethod.Post, “http://localhost/api/product”); var route = config.Routes.MapHttpRoute(“Foo”, “api/{controller}/{id}”); var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { “controller”, “products” } }); var controller = new ProductController { ControllerContext = new HttpControllerContext(config, routeData, request), Request = request, Url […]