Tag: asp.net web api

在包含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方法只接受没有参数的请求? 提前致谢!

修改序列化ASP.NET WebAPI对象中的xml数组元素名称

在WebAPI控制器中返回对象列表时,我一直在努力输出自定义的根xml元素。 我的控制器方法看起来像这样: public List Get() { return repository.GetProducts(); } 它呈现像这样的xml输出: Product1 Product2 我想将更改为但还没有找到这样做的方法。 我尝试过DataContract和DataMember属性的不同变体无济于事。 有没有人知道是否有办法做我想做的事情,而不是将我的List对象包装在一个新类中并返回它?

我如何访问asp.net 5中的内部

在asp.net 5之前,我会在AssemblyInfo.cs中添加“internalsVisibleTo(some.namespace.name)” – 但我的WebApi项目中不再有assemblyInfo.cs。 如何将WebAPI项目中的内部暴露给我的unitTest项目?

是否有可unit testing的方法将文件上载到ASP.NET WebAPI?

我正在使用新的ASP.NET WebAPI的项目中工作。 我目前的任务是接受上传的文件。 到目前为止,我已经使用TDD来驱逐WebAPI代码,但我已经上传了一个墙。 我目前正在关注http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2上的建议,但似乎没有完全可以将其从unit testing中推出。 为了获取文件和表单数据,我必须使用MultipartFormDataStreamProvider ,这是不可能模拟和/或覆盖的。 如果没有放弃我的TDD方法,我该怎么办? 这是示例中的代码: public Task PostFormData() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath(“~/App_Data”); var provider = new MultipartFormDataStreamProvider(root); // Read the form data and return an async task. var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith(t => { if […]

从Javascript将文件对象传递给Web API

我试图通过Javscript web api调用的web api将文件从本地机器上传到sharepoint。 试图将文件对象从javascript传递到web api,但我继续得到错误,如类型错误,资源未找到等。任何人都可以帮助。 Javascript代码: $scope.Upload = function () { if (!window.FileReader) { alert(“This browser does not support the HTML5 File APIs”); return; } var element = document.getElementById(“uploadInput”); var file = element.files[0]; //var folderStructure = “/PublishingImages/Lists/Featured%20Stories/”; var parts = element.value.split(“\\”); var fileName = parts[parts.length – 1]; filename1 = fileName; var descriptionName = fileName; […]

如何在websocket请求期间validationJWT。 .net核心

我正在开发一个使用JWT身份validation和websockets的小型.net核心应用程序。 我已经成功实现了为标准web api控制器生成和validation令牌。 但是,我还想validationWebSocket请求的令牌,这当然不适用于[Authorize]属性。 我已经设置了我的中间件管道,如下所示: app.UseWebSockets(); app.Use(async (http, next) => { if (http.WebSockets.IsWebSocketRequest == false) { await next(); return; } /// Handle websocket request here. How to check if token is valid? }); // secretKey contains a secret passphrase only your server knows var secretKey = …..; var signKey = new SigningCredentials ( new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)), […]

在服务器端提供指纹比较的最佳方法

我将通过WebAPI从服务器端提供指纹认证。 以下代码是指纹比较部分。 var allFingerprints = container.Fingerprints.OrderByDescending(p=>p.FingerprintID); List fmdList = new List(); foreach (var fp in allFingerprints) { fmdList.Add(Fmd.DeserializeXml(fp.FMD)); } IdentifyResult identifyResult = Comparison.Identify(customerFmd, 0, fmdList, thresholdScore, 2); 如果DB中有少量(<3000)指纹,我认为可以从DB读取指纹并进行比较。 但是,如果指纹的数量越来越大,服务器稍后会从客户端获得大量API调用,那么从数据库读取指纹并进行比较的最佳方法是什么? 我是否必须将指纹列表保留在内存中并进行比较? 感谢您提前提出的宝贵意见。

Adobe Sign(echo sign)API使用C#发送文档

好吧,我对使用API​​的理解有限 我试图掌握Adobe Sign API并且遇到了死胡同,在那里测试页面我输入了这个并且它有效 但我不知道如何在C#中做到这一点 我尝试了以下内容,但知道它错过了OAuth的东西,我只是不确定下一步该尝试什么。 顺便说一句foo.GetAgreementCreationInfo()只是获取屏幕截图中的字符串,我只是把它移出来,因为它很大而且丑陋 var foo = new Models(); var client = new RestClient(“https://api.na1.echosign.com/api/rest/v5”); // client.Authenticator = new HttpBasicAuthenticator(username, password); var request = new RestRequest(“agreements/{AgreementCreationInfo}”, Method.POST); request.AddParameter(“name”, “value”); // adds to POST or URL querystring based on Method request.AddUrlSegment(“AgreementCreationInfo”, foo.GetAgreementCreationInfo()); // replaces matching token in request.Resource IRestResponse response = client.Execute(request); var content […]