Tag: asp.net web api2

MVC Web API:URL参数值中的点

我已经实现了搜索function,以查找具有(部分)代码作为搜索条件的数据,其中包括a。 (点)在值中,因此应该可以在搜索条件中包含该值。 考虑url: myhost/api/search/88. 开箱即用,没有做任何额外的事情,这将导致404错误。 虽然,毫不奇怪,如果我删除点,url工作正常。 我发现这是StackOverflow的可能答案: 题 这样就可以了,但我不确定这是否是最佳解决方案。 我的意思是,如果它是无害的,那么有一个放松的url机制是好的,但是我不希望遇到其他可能比我现在想要的点造成更多伤害的字符。 也许我正在为这个修复打开地狱之门…… 我可以相信这个解决方案还是有更安全的替代方案?

.NET Core – 尝试将存储库添加到我的API控制器,但是当我执行每个控制器方法时都会返回500错误

正如标题所说。 我正在创建一个Web API,在我的API控制器中,我正在尝试在构造函数中声明一个存储库。 我成功声明了它,但我尝试在该控制器中调用的每个API方法都返回500错误。 当我删除构造函数/存储库变量时,我没有问题。 调节器 [Route(“api/[controller]”)] public class TestController: Controller { private ITestRepository _testRepository; public TestController(ITestRepository testRepository) { _testRepository= testRepository; } [HttpGet] public IEnumerable Get() { return new string[] { “value1”, “value2” }; } } Startup.cs public void ConfigureServices(IServiceCollection services) { // Add framework services. services .AddMvcCore() .AddJsonFormatters() .AddApiExplorer(); services.AddScoped(); services.AddSwaggerGen(); } 我错过了什么吗?

自定义MultipartFormDataStreamProvider上传后,通过WebApi从SQL下载大文件

这是我之前提出的一个问题的后续问题,该问题由于过于宽泛而被关闭。 上一个问题 在那个问题中,我解释说我需要通过将块存储为单独的行来将大文件(1-3GB)上传到数据库。 我通过重写MultipartFormDataStreamProvider.GetStream方法来做到这一点。 该方法返回了一个自定义流,它将缓冲的块写入数据库。 问题是重写的GetStream方法是将整个请求写入数据库(包括头文件)。 它在保持内存级别平稳的情况下成功写入数据,但是当我下载文件时,除了文件内容之外,它还会返回下载文件内容中的所有标题信息,因此无法打开文件。 有没有办法在重写的GetStream方法中,只需将文件的内容写入数据库而无需编写标题? API [HttpPost] [Route(“file”)] [ValidateMimeMultipartContentFilter] public Task PostFormData() { var provider = new CustomMultipartFormDataStreamProvider(); // Read the form data and return an async task. var task = Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) { Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); } return Request.CreateResponse(HttpStatusCode.OK); }); return task; } [HttpGet] [Route(“file/{id}”)] public async […]

.NET WebApi如何防止“$ ref”:JSON的“x”输出

我正在使用Web Api和Entity Framework,我有一个名为Gift的控制器,当客户端GET是API我通过使用entity framework从DB获取所有礼物并将其作为JSON返回 这是我的控制器function public List Get() { return GiftService.GetIncludeAndActive(); } 这是服务function public List GetIncludeAndActive() { return dbSet.Include(“GiftCategory”).Where(x => x.Status == Model.Enums.GiftStatus.Active).OrderByDescending(x => x.Featured).ThenBy(x => x.Price).ToList(); } 这是礼品模特 public class Gift { public Gift() { this.CartItems = new List(); } public int ID { get; set; } public string GiftName { get; set; } […]

使用JwtAuthForWebAPI的Web APi2身份validation不接受JWT令牌

我遵循了教程,但它似乎与JWT无法正常工作,但基本身份validation还可以。 我下载并安装了JwtAuthForWebAPI。 我还生成了JWT令牌并尝试进行API调用,但错误是HTTP/1.1 401 Unauthorized 。 我是否必须实现/修改任何内容以将声明从JWT转移到Thread.CurrentPrincipal和HttpContext.CurrentPrincipal? 我的代码很简单:global.asax.cs: GlobalConfiguration.Configuration.MessageHandlers.Add( new JwtAuthenticationMessageHandler { AllowedAudience = reader.AllowedAudience, Issuer = reader.Issuer, SigningToken = builder.CreateFromKey(reader.SymmetricKey) }); Web.config文件: 调用示例 GET http://localhost:34669/api/v1/tasks/8 HTTP/1.1 Host: localhost:34669 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjb3JwIiwiYXVkIjoiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIsIm5iZiI6MTQwMDU1Mzc1NywiZXhwIjoxNzE2MTcyOTU3LCJ1bmlxdWVfbmFtZSI6ImJob2dnIiwiZ2l2ZW5fbmFtZSI6IkJvc3MiLCJmYW1pbHlfbmFtZSI6IkhvZ2ciLCJyb2xlIjpbIk1hbmFnZXIiLCJKdW5pb3JXb3JrZXIiXX0.Ls73kz80rCaCNqzc3K32BVO9_LnJDL8c1g5AXKIzn8w

Web APIvalidation不会触发自定义模型绑定器

我正在使用Web API 5构建Web服务。我正在通过扩展IModelBinder接口来实现自定义模型绑定器,以将复杂类型映射为动作参数。 绑定部分工作正常。 但模型validation不会发生。 ModelState.IsValid始终为true。 public class PagingParamsVM { [Range(1, Int32.MaxValue, ErrorMessage = “Page must be at least 1”)] public int? Page { get; set; } [Range(1, Int32.MaxValue, ErrorMessage = “Page size must be at least 1”)] public int? PageSize { get; set; } } public class PaginationModelBinder : IModelBinder { public bool BindModel(HttpActionContext […]

使用JsonProperty对JSON进行Model属性绑定

我受到我方和客户之间协议的约束,使用包含破折号的json参数。 由于无法在C#中的属性名称中使用它,我需要映射到所需的属性。 我现在应该做什么: 为方便起见,下面的代码被简化。 模型 public class MyRequest { [JsonProperty(“request-number”)] public string RequestNumber { get; set; } [JsonProperty(“name”)] public string Name { get; set; } } 调节器 [HttpGet] [Route(“api/load-stuff”)] public Stuff LoadStuff([FromUri]MyRequest request) { return BackEnd.LoadStuff(request); } 从客户端调用API 使用此uri定位上述控制器: http://localhost:12345/api/load-stuff?request-number=X123&name=requestName 我的问题 如果我在BackEnd.LoadStuff行放置断点,我可以看到调用到达,但请求未正确映射。 名称包含我所期望的: requestName ,但RequestNumber为null ,因此映射不起作用。 出了什么问题?

在Web API 2中返回一个String

听起来很简单,我没有找到任何关于此的文档,也许我写错了所以如果是这样的话,一些关于此的好文档将不胜感激。 我只想返回一个字符串或类型字符串的模型。 return “string here”; 我每次都会收到此错误: Severity Code Description Project File Line Error CS0029 Cannot implicitly convert type ‘string’ to ‘System.Web.Http.IHttpActionResult’ TaskManagement C:\dev\TaskManagement\TaskManagement\Controllers\JobsController.cs 157 我也尝试过使用CAST – 同样的错误。 return (IHttpActionResult)”string”

405方法不允许Web API 2

我已经浏览了几乎所有我能找到的文章,SO等等。 我已经对Web.config进行了更改以满足答案,因为它们似乎都指向删除WebDAV模块和处理程序。 但是,我仍然收到错误: 405方法不允许 请求的资源不支持http方法’PUT’。 注意:这最初只是一个MVC 4项目。 我添加了工件来支持Web API。 好像我可能错过了一些东西。 注意: GET调用在Angular中运行得很好。 Web API路由配置 configuration.Routes.MapHttpRoute( name: “Default API”, routeTemplate: “api/{controller}/{id}”, defaults: new { action = “Get”, id = RouteParameter.Optional }, constraints: new { id = @”[\da-z-]{36}” }); configuration.Routes.MapHttpRoute( name: “Default API with Action”, routeTemplate: “api/{controller}/{action}”, defaults: new { action = “Get” }); var formatter = […]

Api Controller具有无参数的公共构造函数错误

我使用Unity来做我的DI,我遇到了以下错误: – “尝试创建’UploadController’类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。” 我有以下UnityResolver: – public class UnityResolver : IDependencyResolver, IDependencyScope, System.Web.Http.Dependencies.IDependencyResolver { protected IUnityContainer container; public UnityResolver(IUnityContainer container) { if (container == null) { throw new ArgumentNullException(“container”); } this.container = container; } public object GetService(Type serviceType) { try { return container.Resolve(serviceType); } catch (ResolutionFailedException) { return null; } } public IEnumerable GetServices(Type serviceType) { […]