Tag: asp.net web api

ApiController可以返回带有其他对象集合的对象吗?

如果我有一个只有简单属性的Customer类(例如Name等),那么我可以创建一个派生自ApiController ,并使用URL /api/customers查询我的Customer对象。 类似地,如果我有一个具有简单属性的Order类( Description , Amount ),那么我可以创建一个OrdersController并以相同的方式访问它。 但是,如果我然后向Customer类添加一个属性,该属性列出与该Customer关联的Order : public class Customer { public int Id { get; set; } public string Name { get; set; } // … public virtual ICollection Orders { get; set; } } …然后当我尝试使用/api/customers进行查询时,我得到500服务器错误。 我可以在CustomersController放置一个断点,并且可以看到它确实调用了正确的方法,并尝试返回一个值。 但是,在框架的内容中,它无法将其转换为HTTP响应。 看起来它无法序列化Orders信息和/或打包它以获得HTTP响应,但我不确定我需要做些什么来实现这一点。 或者仅仅是WebApi的东西不是为了返回复杂的对象而设计的? 更新 :我的代码在这里: https : //gist.github.com/43ed2f29f8adfb44cef6 更新2 :有关我得到的错误的更多信息: Server error The website […]

ASP.Net Web Api – ApiExplorer不包含任何ApiDescriptions

我正在尝试在我的Web服务的控制器中实现一个Options方法,该方法将返回一个消息,其中包含与控制器关联的URI端点的有效HTTP方法。 我的Options方法看起来像这样: public HttpResponseMessage Options() { var resp = new HttpResponseMessage(); resp.Content = new StringContent(“”); var apiExplorer = GlobalConfiguration.Configuration.Services .GetApiExplorer(); foreach (ApiDescription api in apiExplorer.ApiDescriptions) { resp.Content.Headers.Add(“Allow”, api.HttpMethod.Method); } return resp; } 我在具有Get,Post和Delete方法的控制器内部的全新Web Api项目(暗示:未改变的路由)中尝试了上述方法。 正如预期的那样,返回带有“Allow:GET,POST,DELETE”的响应。 但是,我遇到了麻烦,将其添加到我正在处理的更大的项目中。 在较大的项目中,ApiExplorer中的ApiDescriptions列表不包含任何元素。 为什么是这样? 我怀疑这是由于已经实现的自定义路由,尽管怀疑的唯一依据是以下链接: http://forums.asp.net/t/1821651.aspx/1 有没有其他人经历过这个空的ApiDescription列表? 如果是这样,你找到了补救措施吗? 注意:我使用的是MCV 4 RC

将C#对象发送到webapi控制器

我正在尝试将C#对象传递给web api控制器。 api配置为存储发布到它的Product类型的对象。 我已经使用Jquery Ajax方法成功添加了对象,现在我试图在C#中获得相同的结果。 我创建了一个简单的控制台应用程序来向api发送Post请求: public class Product { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public decimal Price { get; set; } } static void Main(string[] args) { string apiUrl = @”http://localhost:3393/api/products”; var client = new HttpClient(); client.PostAsJsonAsync(apiUrl, new […]

Web API中DefaultControllerFactory的等价物是什么?

我们正在尝试用新的ASP.NET Web API替换以前的DefaultControllerFactory,以更好地处理REST / XML调用。 搜索Web始终指向实现System.Web.Http.Dependencies.IDependencyResolver ,然后处理GetService()以及该接口所需的其他一些方法。 然而,它似乎是缓存ApiController实例和任何新的控制器,它似乎没有解决。 由于性能问题,很难在启动期间提供所有可能的ApiController实例。 DefaultControllerFactory允许提供控制器实例并缓存“命中”条目,但是当一个instane无法延迟加载时抛出错误。 是否还需要实施其他过载/控制器工厂方法? 到目前为止搜索没有产生任何命中,但任何指针都会很棒。 感谢您的时间。

使用Postman上传ASP核心WebApi测试文件

我创建了一个采用任意文件的端点: [HttpPost()] public async Task CreateFile(IFormFile file) 当我使用Postman测试它时,该file始终为null。 这是我在邮差中所做的事情: 我究竟做错了什么?

WebAPI,JSON.Net和失去小数精度

我使用WebAPI和JSON.Net遇到了一个奇怪的问题。 当反序列化已提交给我的API的JSON时,我似乎正在失去精确度! 我将小数提交到3位小数,但当值在我的对象中实现时,它只有2位小数! 我提交的JSON看起来像这样: { id: 1, name: ‘mock data’, value: 123.456 } 这绑定到一个看起来像这样的类: public class MockObject { public int Id { get; set; } public string Name { get; set; } public decimal Value { get; set; } } 为了完整性,这基本上就是我的WebAPI方法: public HttpResponseMessage Post (MockObject data) { // do something with the value here and […]

更改WebApi应用程序的构建输出目录

我是一个从事大型应用程序的团队的一员。 我是这个团队的新成员,正在构建一个新的应用程序。 作为此过程的一部分,我创建了一个WebApi应用程序,它将公开一些HTTP端点,通过它我将检索有关该应用程序的信息。 由于条件需要很长时间才能解释,我想让WebApi项目构建在另一个目录中,特别是..\bin\Server\Debug\因为这是应用程序构建的大部分其他部分至。 我不打扰,除了该应用程序试图使用基于工作目录找到的文件,这是我的WebApi应用程序当前错误。 我尝试在项目设置中更改它,现在我收到此错误: 到目前为止,我的谷歌搜索引起了一些帮助。 有谁知道如何解决这个问题?

AngularJS与ASP.NET MVC混淆

请注意:我在Stack Overflow中已经阅读了类似的一些问题但是没有从这些答案中得到我想要的清晰概念。 我清楚地了解为什么以及如何将AngularJS与ASP.NET Web API一起使用。 但我对使用AngularJS和ASP.NET MVC感到困惑! 在使用ASP.NET Web API的AngularJS的情况下: Web API控制器方法返回数据,AngularJS调用Web API控制器方法并捕获数据,然后在View中呈现数据。 这非常符合逻辑! 在使用ASP.NET MVC的AngularJS的情况下: ASP.NET MVC Controller方法本身返回带有数据的View / View。 那么AngularJS与ASP.NET MVC有什么用? 尽管如此,如果我想在ASP.NET MVC中使用AngularJS,那么我必须从ASP.NET MVC控制器方法返回JSON而不是MVC视图。 我的问题是: 为了将AngularJS与ASP.NET MVC一起使用,从ASP.NET MVC控制器方法返回JSON而不是MVC视图是否合乎逻辑? 如果我这样做,有什么好处吗? AngularJS与ASP.NET MVC的实际用途是什么? 或者我在哪里可以将AngularJS与ASP.NET MVC一起使用?

在c#中手动解码OAuth承载令牌

在我的基于Web Api 2.2 OWIN的应用程序中,我有一种情况,我手动需要解码承载令牌,但我不知道如何做到这一点。 这是我的startup.cs public class Startup { public static OAuthAuthorizationServerOptions OAuthServerOptions { get; private set; } public static UnityContainer IoC; public void Configuration(IAppBuilder app) { //Set Auth configuration ConfigureOAuth(app); ….and other stuff } public void ConfigureOAuth(IAppBuilder app) { OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), […]

获取相关实体ASP.NET WebApi OData v4导致“未找到与请求URI匹配的HTTP资源”

我按照Mike Wasson的这个asp.net教程 ,设法建立相关实体就好了,但是当我将这个逻辑应用到我的项目中时,更复杂的实体关系(其中有更多的实体关系;这是唯一的区别)在OData调用中不会成功,我得到了404这个有效负载: { “error”: { “code”: “”, “message”: “No HTTP resource was found that matches the request URI ‘http://localhost:19215/Menus(c94f7f98-6987-e411-8119-984be10349a2)/MenuPermissions’.”, “innererror”: { “message”: “No routing convention was found to select an action for the OData path with template ‘~/entityset/key/unresolved’.”, “type”: “”, “stacktrace”: “” } } } 该教程没有提到必须设置EdmModel导航,Mike Wasson指出“asp.net是官方文档:-)”; 所以,我花了一些时间试图让这些相关的实体工作,以为我错误地设置了项目。 我认为它可能与NuGet正在安装的ASP.NET OData库版本有关(NuGet Console安装6.9.x,而NuGet Dialog安装6.5.x)。 我也想知道是不是因为我将项目设置为一个完全空的项目然后使用OWIN,所以我尝试使用纯ASP.NET模板化解决方案。 我还尝试了一些其他可能的解决方案:我的控制器方法上的OData-route-attributes; […]