Tag: asp.net web api

获取属性路由模板列表asp.net webapi 2.2

我有一个使用WebApi 2.2在C#中运行的.NET项目。 我正在使用属性注册所有路由。 我想要做的是以语法方式检索所有属性路由模板作为字符串。 类似于: var routeTemplates = System.Web.Routing.RouteTable.Routes.Select(x => x.RouteTemplates); 当我在ControllerContext.Configuration.Routes上放置手表时,我能够看到所有路线 但是,我似乎无法从我的代码访问路由,因为它们是受保护的内部。 我怎么得到它们? 我附上了一个屏幕截图,显示了我在locals watch上看到的值,我需要了解它。

WebApi OAuth UseOAuthBearerAuthentication给出“Sequence包含多个元素”错误

我按以下方式配置了我的WebApi OAuth 2.0: app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions { Provider = new OAuthBearerAuthenticationProvider(), }); app.UseOAuthBearerTokens(OAuthOptions); 但它在每个请求时给出了以下错误: Message : An error has occurred. ExceptionMessage : Sequence contains more than one element ExceptionType : System.InvalidOperationException StackTrace : at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) at Microsoft.Owin.Security.AuthenticationManager.d__8.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task […]

Swashbuckle设置manualy operationId

我需要知道是否可以设置自定义operationid或命名约定,我的意思是我知道操作filter可以覆盖如何生成operationId的方式 https://azure.microsoft.com/en-us/documentation/articles/app-service-api-dotnet-swashbuckle-customize/ using Swashbuckle.Swagger; using System.Web.Http.Description; namespace Something { public class MultipleOperationsWithSameVerbFilter : IOperationFilter { public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { if (operation.parameters != null) { operation.operationId += “By”; foreach (var parm in operation.parameters) { operation.operationId += string.Format(“{0}”,parm.name); } } } } } 在SwaggerConfig.cs中 c.OperationFilter(); 现在这有助于改变招摇的描述,请检查以下内容: 一切都很好,现在我最终在一个更黑暗的地方,例如类似于可能的情况:在同一个控制器上我有两个端点 发布:/ customer boddy:{email,location ….} […]

entity framework核心:在上一个操作完成之前,在此上下文中启动了第二个操作

我正在使用Entity Framework Core开发ASP.Net Core 2.0项目 在我的一个列表方法中,我收到此错误: InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe. Microsoft.EntityFrameworkCore.Internal.ConcurrencyDetector.EnterCriticalSection() 这是我的方法: [HttpGet(“{currentPage}/{pageSize}/”)] [HttpGet(“{currentPage}/{pageSize}/{search}”)] public ListResponseVM GetClients([FromRoute] int currentPage, int pageSize, string search) { var resp = new ListResponseVM(); var items = _context.Clients .Include(i => i.Contacts) […]

$ select和$ expand break ODataQueryOptions – 如何修复?

我们将Microsoft ASP.NET MVC OData WebAPI用于我们的Web服务。 由于围绕层次结构ID的某些数据架构问题(这些问题超出了此对话的范围),我们的一些GET操作必须使用ODataQueryOptions并手动操作表达式以添加其他限制。 我们这样做(删除error handling代码并调用内联的其他方法) public IQueryable Get(ODataQueryOptions oDataQueryOptions) { IQueryable result; IQueryable dataSet = context.Persons; var tempQuery = oDataQueryOptions.ApplyTo(dataSet).Cast(); var modifier = new HierarchyNodeExpressionVisitor(GetDescendantsOfNode, GetAncestorsOfNode); var expression = modifier.ModifyHierarchyNodeExpression(tempQuery.Expression); result = context.Persons.Provider.CreateQuery(expression); return result; } 这已经有一段时间了,但是我们一直在急切地等待选择和扩展,以便我们能够更好地控制从服务中获得的数据。 星期一我们将我们的开发环境更新为WebApi OData 5.0.0-rc1并进行了select-and-expand工作,但我们不能将它用于使用ODataQueryOptions的这些服务。 我们只能用它来对付我们的其他服务。 如果我们使用$select和/或$expand查询上面的代码,我们会收到以下错误: “message”: “The ‘ObjectContent`1’ type failed to serialize the response body […]

如何在我的JSON模型类中使用保留关键字作为标识符?

我之前从未使用过Web API,但我需要一个接受/返回JSON对象的Web服务,并且使用它似乎是一个合理的事情。 它看起来很简单(如果不是为了我的目的有点过分),但我需要处理的数据结构看起来像: { “values”:[“foo”, “bar”], “default”:”bar” } 所以我去制作一个Model对象: class DropDownValues { public string[] values { get; set; } public string default { get; set; } } 问题是默认似乎是受保护的关键字。 必须有一些方法来解决这个问题,对吧?

ASP.NET Web API部分响应Json序列化

我正在实现支持部分响应的Web API。 /api/users?fields=id,name,age 鉴于用户类 [JsonObject(MemberSerialization.OptIn)] public partial class User { [JsonProperty] public int id { get; set; } [JsonProperty] public string firstname { get; set; } [JsonProperty] public string lastname { get; set; } [JsonProperty] public string name { get { return firstname + ” ” + lastname; } } [JsonProperty] public int age { […]

Web Api模型绑定和多态inheritance

我问是否有人知道是否有可能将一个inheritance自抽象类的具体类传递给Web Api。 例如: public abstract class A{ A(); } public class B : A{ } [POST(“api/Request/{a}”)] public class Request(A a) { } 目前我已经环顾四周,大多数解决方案似乎都说使用TypeNameHandling会起作用。 JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; 然而,事实并非如此。 我的模型也从控制台应用程序传递到webapi。 我已经读过,我可能能够反序列化json对象,在尝试了几次后,我认为这不会起作用。 我已经考虑过创建一个客户模型绑定器,但是我不想让我的应用程序变得更加复杂。 目前我inheritance了3个模型的抽象类,但将来可能会扩展它。 您可能会注意到添加自定义模型绑定器可能需要多个绑定器,除非有一种方法可以为所有类型的抽象类创建一个通用绑定器。 为了在我的控制台应用程序中进行扩展,我已经实例化了类b,然后将其传递给ObjectContent,然后发布到我的webapi item = B(); //serialize and post to web api MediaTypeFormatter formatter; JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); jsonFormatter.SerializerSettings.TypeNameHandling […]

无法让ASP.NET MVC 6 Controller返回JSON

我有一个MVC 6项目,我正在使用Fiddler来测试Web API。 如果我采取以下控制器操作,使用EntityFramework 7返回List。 然后html将呈现正常。 [HttpGet(“/”)] public IActionResult Index() { var model = orderRepository.GetAll(); return View(model); } 但是当我尝试返回Json响应时,我得到502错误。 [HttpGet(“/”)] public JsonResult Index() { var model = orderRepository.GetAll(); return Json(model); } 关于为什么对象没有正确序列化为json的任何想法?

如何在Web API中实现HttpMessageHandler?

在ASP.NET 4.5 MVC 4 Web API项目中,我想添加一个自定义的HttpMessageHandler 。 我已经更改了WebApiConfig类(在\ App_Satrt \ WebApiConfig.cs中),如下所示: public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional }, constraints: null, handler: new MyCustomizedHttpMessageHandler() ); } } 然后我开发了MyCustomizedHttpMessageHandler : public class MyCustomizedHttpMessageHandler : HttpMessageHandler { protected override Task SendAsync(HttpRequestMessage request, […]