如何配置ASP.NET Core Web Api控制器只返回Development环境相当格式化的json ?
默认情况下,它返回如下内容:
{"id":1,"code":"4315"}
Run Code Online (Sandbox Code Playgroud)
我希望在响应中有缩进以便于阅读:
{
"id": 1,
"code": "4315"
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OData和EntityFramework创建一个带有"简单"web api的新ASP.NET Core项目.我之前使用OData与旧版本的ASP.NET.
我已经设置了一个只有一个简单的get函数的控制器.我已经设法使用基本的OData命令作为过滤器和顶部,但我无法使扩展命令工作.我想这是因为我无法弄清楚如何在Startup.cs中设置它.我尝试过很多东西,包括跟随Github的一些odata样本:
https://github.com/OData/WebApi/tree/vNext/vNext/samples/ODataSample.Web https://github.com/bigfont/WebApi/tree/master/vNext/samples/ODataSample.Web
在我的启动文件中,我尝试从Service类中排除一些根本没有效果的属性.所以问题可能在于我使用IDataService接口的方式.(ApplicationContext像样本一样实现它)
要明确我正在使用完整的.NET Framework创建一个ASP.NET Core web api,而不仅仅是.Core框架.我当前的代码是两个样本中最好/最差的混合,并且我可以过滤WebAPI,但不能让它扩展或隐藏属性.
任何人都可以看到我缺少的东西og有一个工作的ASP.NET Odata样本.我是startup.cs中整个设置的新手?猜猜我正在找一个做过这项工作的人.
调节器
[EnableQuery]
[Route("odata/Services")]
public class ServicesController : Controller
{
private IGenericRepository<Service> _serviceRepo;
private IUnitOfWork _unitOfWork;
public ServicesController(IGenericRepository<Service> serviceRepo, IUnitOfWork unitOfWork)
{
_serviceRepo = serviceRepo;
_unitOfWork = unitOfWork;
}
[HttpGet]
public IQueryable<Service> Get()
{
var services = _serviceRepo.AsQueryable();
return services;
}
}
Run Code Online (Sandbox Code Playgroud)
启动
using Core.DomainModel;
using Core.DomainServices;
using Infrastructure.DataAccess;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.OData.Extensions;
namespace Web
{
public class Startup …Run Code Online (Sandbox Code Playgroud) c# odata asp.net-web-api-odata asp.net-core asp.net-core-webapi
关于为什么在最新的ASP.NET Core Web API模板中没有单独的用户帐户身份验证选项,我感到有点困惑.
是否仍然可以按照MVC模板的方式实现单个用户帐户,还是没有意义?
假设我正在创建一个独立的Web API,它将拥有访问具有AspNet Identity表的数据库的所有业务逻辑和数据层.我打算用MVC应用调用这个API.
我知道这样做的一种方法是使用个人用户帐户auth创建一个asp.net MVC应用程序,并使用controllers/api文件夹在MVC应用程序中构建API.但是,我不希望这样做,因为我希望API是它自己的独立项目,可以托管在完全不同的服务器上,并由多个应用程序访问,而不仅仅是MVC应用程序.
由于没有模板,有人可以引导我在正确的方向上进行身份验证通常如何工作吗?
asp.net asp.net-web-api asp.net-identity asp.net-core asp.net-core-webapi
我面临一个奇怪的问题,几乎花了4个小时没有运气.
我有一个简单的Web API,我在表单提交上调用.
API -
// POST: api/Tool
[HttpPost]
public void Post([FromBody] Object value)
{
_toolService.CreateToolDetail(Convert.ToString(value));
}
Run Code Online (Sandbox Code Playgroud)
HTML的
<!DOCTYPE html>
<html>
<body>
<h2>HTML Forms</h2>
<form name="value" action="https://localhost:44352/api/tool" method="post">
First name:<br>
<input type="text" id="PropertyA" name="PropertyA" value="Some value A">
<br>
Last name:<br>
<input type="text" id="PropertyB" name="PropertyB" value="Some value B">
<br><br>
<!--<input type="file" id="Files" name="Files" multiple="multiple"/>-->
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我点击提交按钮时,我得到以下错误 -
{"":["The input was not valid."]}
Run Code Online (Sandbox Code Playgroud)
启动课程中的配置 -
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<IConfiguration>(Configuration);
}
public void Configure(IApplicationBuilder …Run Code Online (Sandbox Code Playgroud) 主要目标是增加站点发送Web通知的能力,以弹出系统通知,以使用Html5 Push API和服务工作人员提醒用户.不使用SignalR,它只能在打开网站时运行客户端脚本.也应该是,如果网站被关闭,如提及发布通知的能力在这里 -这是可能的.
这是关于Push API的好文章并提供了很好的示例 但是它使用NodeJS作为服务器和web-push组件来向通知服务发送请求.
找不到任何.NET示例.我想到了两个解决方法.
首先,是基于关于服务器的Push API文章说明从头开始编写所有内容:
当您发送没有数据的推送消息时,您只需使用HTTP POST请求将其发送到端点URL.但是,当推送消息包含数据时,您需要对其进行加密,这是一个非常复杂的过程.
其次,是使用AspNetCore.NodeServices(关于它的文章)来执行node.js脚本文件
还有更多解决方案吗?也许存在现成的解决方案?
经过学科研究
3例:
new Notification('Message')它变得复杂了.怎么了?
可能的解决方案:
对于1和2个案例找到了此存储库.认为这是一个很好的前端解决方案,具有良好的后备支持.对于3个案例仍然不知道该怎么做.
当前解决方案 补充:2017-11-22
我想创建一个新的Handler,它扩展了DelegatingHandler,使我能够在进入控制器之前做一些事情.我已经在各个地方读过我需要从DelegatingHandler继承,然后像这样覆盖SendAsync():
public class ApiKeyHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// do custom stuff here
return base.SendAsync(request, cancellationToken);
}
}
Run Code Online (Sandbox Code Playgroud)
这是好的和花花公子,除了它没有做任何事情,因为我没有在任何地方注册!我再次在很多地方看到我应该在WebApiConfig.cs中这样做,但这不是Web API 的ASP.NET 核心版本的一部分.我试图找到类似于Startup.cs文件(Configure(),ConfigureServices()等)中的各种东西,但没有运气.
任何人都可以告诉我如何注册我的新处理程序?
c# asp.net-web-api asp.net-core-mvc asp.net-core asp.net-core-webapi
我想在ASP.Net Core中实现基于JWT的安全性.我现在要做的就是在Authorization标题中读取持有者令牌,并根据我的标准验证它们.我不需要(也不想)包含ASP.Net Identity.事实上,我试图避免使用尽可能多的MVC添加的东西,除非我真的需要它们.
我创建了一个最小的项目,它演示了这个问题.要查看原始代码,只需查看编辑历史记录即可.我希望此示例拒绝所有/ api/icons请求,除非它们为AuthorizationHTTP标头提供相应的承载令牌.该示例实际上允许所有请求.
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Routing;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using System;
using Newtonsoft.Json.Serialization;
namespace JWTSecurity
{
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddAuthentication();
services.AddMvcCore().AddJsonFormatters(options => options.ContractResolver = new CamelCasePropertyNamesContractResolver());
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory …Run Code Online (Sandbox Code Playgroud) 当我阅读关于webapi以响应请求和处理错误时,一切都基于:
IHttpActionResult
HttpResponseException
Run Code Online (Sandbox Code Playgroud)
但是当您创建.net核心webapi项目时,这些项目不可用.我能找到IActionResult,它似乎相当于?
但是我要绕圈试图找出一个非常简单的东西,即如何处理.net核心webapi中的错误,因为HttpResponseException不可用.我得到的印象是"http"中的所有内容,仅适用于完整的MVC应用程序.
我想做的就是返回一个错误,当然它必须简单......
我已经通过链接:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection
并了解到如何为Web API使用依赖注入.
如上面的链接所述,我可以使用Startup(Startup.cs)类在API层内部进行依赖注入.但是如何实现.NET核类库的依赖注入.下面是我如何添加类库的截图.

我的项目结构是
在项目"DataManagement.Repository"中,我编写了一个类"UserRepository",并在项目"DataManagement.Repository.Interfaces"中编写了一个接口"IUserRepository".
在"DataManagement.Business"项目中,我写了一个类"UserManager"
class UserManager
{
private IUserManager _userManager;
public UserManager(IUserManager userManager)
{
_userManager = userManager;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试通过构造函数实现依赖注入.
但我不确定在.NET Core类库(.NET标准版)中启用依赖项注入需要做哪些更改.
dependency-injection .net-core asp.net-core asp.net-core-webapi visual-studio-2017