Tag: asp.net web api2

如何在JSON输出上强制ISO格式“YYYY-MM-DDThh:mm:ss.sss”?

我有一个ASP .NET WebApi2 api,它以JSON格式返回一些时间戳。 时间戳有毫秒的分辨率。 通常我得到这种格式的时间戳,很好”YYYY-MM-DDThh:mm:ss.sss” 不幸的是,如果时间戳碰巧用整秒编码日期,则输出格式为”YYYY-MM-DDThh:mm:ss” (注意缺少的.sss “) 如何在JSON输出上一直强制ISO格式”YYYY-MM-DDThh:mm:ss.sss” ?

Libsodium-net – 无法加载DLL’libsodium.dll

我通过NuGet安装了Libsodium-net,并且可以在我的课程中包含Sodium,但是当我尝试运行它时,我得到了 Sodium.dll中出现“System.DllNotFoundException”类型的exception,但未在用户代码中处理 附加信息:无法加载DLL’libsodium.dll’:找不到指定的模块。 (HRESULTexception:0x8007007E) 我只是想从gitbooks文档中运行示例代码https://bitbeans.gitbooks.io/libsodium-net/content/password_hashing/index.html const string PASSWORD = “Correct Horse Battery Staple”; const string SALT = “qa~t](84z<1t<1oz:ik.@IRNyhG=8q(o"; const long OUTPUT_LENGTH = 512; //this will produce a 512 byte hash var hash = PasswordHash.ScryptHashBinary(PASSWORD, SALT, PasswordHash.Strength.Medium, OUTPUT_LENGTH);

Web Api:推荐的返回json字符串的方法

我有几个已经收到必须返回给客户端的json字符串(不是对象)的服务。 目前,我正在显式创建HttpResponseMessage并将其Content属性设置为服务接收的json字符串: var response = Request.CreateResponse(HttpStatusCode.OK); response.Content = new StringContent(jsonUtilizadores, Encoding.UTF8, “application/json”); return response; 现在,使用新的IHttpActionResult有更好的方法吗? 使用Content或Ok方法最终用引号包装json字符串,这不是我想要的。 任何反馈?

如何在一个解决方案中调试/unit testingwebAPi

有没有办法在一个vs解决方案中进行unit testing或调试web api? 我正在使用HttpClient来使用WebAPI并且有两个VS实例来执行此操作。 在1 VS实例中我有unit testing,在第二个vs实例中我有在localhost中运行的webapi。 有一个更好的方法吗? unit testing的首选方法是引用WebAPI项目吗? 我想使用httpClient来使用它,而不必在UnitTest项目中引用它。 所以在我的UnitTest方法中,它的baseAddress为“ http:// localhost:1234 ” 这将是托管从同一解决方案启动的WebAPI的地方。 我正在调试的当前方式要求我启动第二个Visual Studio实例,其中加载了相同的解决方案并且有一个运行WebAPI项目,而另一个Visual Studio运行unit testing项目。

使用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 。 […]

不同的RoutePrefix,相同的控制器名称

我在使用命名空间和RoutePrefix将我的web-api应用程序拆分到不同的区域(而不是mvc区域)时遇到问题 该应用程序使用Owin Self Host托管,在我的Startup类中,我有以下内容。 HttpConfiguration config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); app.UseWebApi(config); 我测试过的两个控制器 [RoutePrefix(“api/test”)] public class TestController : ApiController { [Route(“”)] public IHttpActionResult Get() { return Ok(“api”); } } [RoutePrefix(“sync/test”)] public class TestController : ApiController { [Route(“”)] public IHttpActionResult Get() { return Ok(“sync”); } } 这两个控制器存在两个不同的命名空间,Api和Sync。 当我尝试使用http:// localhost / api / test和http:// localhost / api / […]

WebAPi – 统一来自ApiController和OAuthAuthorizationServerProvider的错误消息格式

在我的WebAPI项目中,我使用Owin.Security.OAuth添加JWT身份validation。 在我的OAuthProvider的GrantResourceOwnerCredentials ,我使用下面的行设置错误: context.SetError(“invalid_grant”, “Account locked.”); 这将返回给客户: { “error”: “invalid_grant”, “error_description”: “Account locked.” } 在用户获得身份validation并且他尝试向我的某个控制器执行“正常”请求后,当模型无效时,他会得到以下响应(使用FluentValidation): { “message”: “The request is invalid.”, “modelState”: { “client.Email”: [ “Email is not valid.” ], “client.Password”: [ “Password is required.” ] } } 这两个请求都返回400 Bad Request ,但有时您必须查找error_description字段,有时还要查找message 我能够创建自定义响应消息,但这仅适用于我返回的结果。 我的问题是:是否有可能在ModelValidatorProviders和其他地方返回的响应中替换error message ? 我已经阅读了ExceptionFilterAttribute但我不知道这是否是一个好的起点。 FluentValidation应该不是问题,因为它只是向ModelState添加错误。 编辑: 接下来我要修复的是WebApi中返回数据的命名约定不一致 – 当从OAuthProvider返回错误时我们有error_details ,但是当使用ModelState (来自ApiController )返回BadRequest […]

请求在Azure AppService中排队,尽管它在线程池中有足够的线程

我使用asp.net webapi编写了一个api,并将其部署在azure中作为Appservice。 我的控制器的名称是TestController,我的动作方法类似于波纹管。 [Route(“Test/Get”)] public string Get() { Thread.Sleep(10000); return “value”; } 因此,对于每个请求,它应该在返回字符串“value”之前等待10秒。 我还编写了另一个端点来查看threadpool中用于执行请求的线程数。 这个动作就像吼叫一样。 [Route(“Test/ThreadInfo”)] public ThreadPoolInfo Get() { int availableWorker, availableIO; int maxWorker, maxIO; ThreadPool.GetAvailableThreads(out availableWorker, out availableIO); ThreadPool.GetMaxThreads(out maxWorker, out maxIO); return new ThreadPoolInfo { AvailableWorkerThreads = availableWorker, MaxWorkerThreads = maxWorker, OccupiedThreads = maxWorker – availableWorker }; } 现在,当我们同时向Test / Get端点发出29次调用时,所有请求都需要大约11秒才能成功。 因此服务器在11个线程中同时执行所有请求。 […]

如何在Ubuntu上托管/发布我的.Net Core WebAPI?

我正在学习.Net Core。 我使用ASP.Net MVC开发了WebApplication,因为它可以在本地IIS上安装和运行。 在Ubuntu和Linux中托管/发布.Net Core WebApi的方式类似,而不是像5000这样的特定端口运行? docker对这种情况有帮助吗? 如果是,那我该如何使用它? 是否可以在没有docker的情况下托管/发布? 如何在没有Docker的情况下主持/发布? 我还阅读了以下链接并实施了所有步骤。 发布到Linux生产环境 在上面的链接中,我无法确定访问webapi的URL是什么?

‘参数字典包含空条目’错误,Web API

在我的Web API上,我有一个文档控制器,它有两个简单的操作: [AllowAnonymous] public class DocumentController : ApiController { public String Get(int id) { return “test”; } public String Get(string name) { return “test2”; } } 以下URL(执行第一个函数)工作正常: HTTP://本地主机:1895 / API /文档/ 5 但是这个URL(应该执行第二个函数): HTTP://本地主机:1895 / API /文档/测试 引发此错误: {“message”:“请求无效。”,“messageDetail”:“参数字典包含方法’xx.yy.Document Get的非可空类型’System.Int32’的参数’id’的空条目( Int32)’in’API.Controllers.DocumentController’。可选参数必须是引用类型,可以为空的类型,或者声明为可选参数。“ } 这是MapHttpRoute中的MapHttpRoute: config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “{controller}/{id}”, defaults: new { id = RouteParameter.Optional } […]