标签: asp.net-core-webapi

如何在ASP.NET Core Web API中配置JSON格式缩进

如何配置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)

c# asp.net json.net asp.net-core asp.net-core-webapi

28
推荐指数
3
解决办法
1万
查看次数

如何正确地将OData与ASP.net Core集成

我正在尝试使用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

27
推荐指数
3
解决办法
2万
查看次数

ASP.NET Core Web API模板中没有单独的用户帐户auth选项

关于为什么在最新的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

27
推荐指数
2
解决办法
6758
查看次数


输入无效.Net Core Web API

我面临一个奇怪的问题,几乎花了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)

c# asp.net-core-webapi asp.net-core-2.0

26
推荐指数
3
解决办法
3万
查看次数

Asp Net Core Web推送通知

主要目标是增加站点发送Web通知的能力,以弹出系统通知,以使用Html5 Push API和服务工作人员提醒用户.不使用SignalR,它只能在打开网站时运行客户端脚本.也应该是,如果网站被关闭,如提及发布通知的能力在这里 -这是可能的.

是关于Push API的好文章并提供了很好的示例 但是它使用NodeJS作为服务器和web-push组件来向通知服务发送请求.

找不到任何.NET示例.我想到了两个解决方法.

首先,是基于关于服务器的Push API文章说明从头开始编写所有内容:

当您发送没有数据的推送消息时,您只需使用HTTP POST请求将其发送到端点URL.但是,当推送消息包含数据时,您需要对其进行加密,这是一个非常复杂的过程.

其次,是使用AspNetCore.NodeServices(关于它的文章)来执行node.js脚本文件

还有更多解决方案吗?也许存在现成的解决方案?

经过学科研究

3例:

  1. HTTP +旧浏览器+ IE所有版本 - 使用信号R +使用html + js渲染通知
  2. HTTP +现代浏览器(Chrome,Firefox,Safary,Opera?,Edge),支持Notification API. - 使用SignalR并使用js触发本机浏览器通知new Notification('Message')
  3. HTTPS + Chrome(移动版),支持Push API,可以使用服务工作者触发已关闭网站的本机通知.移动版Chrome只能使用service-worker创建通知.

它变得复杂了.怎么了?

可能的解决方案:

对于1和2个案例找到了存储库.认为这是一个很好的前端解决方案,具有良好的后备支持.对于3个案例仍然不知道该怎么做.

当前解决方案 补充:2017-11-22

  • 没有脱机客户端通知支持
  • 没有移动支持
  • 对于Chrome v62 +将所有项目移至https - 链接
  • 使用SignalR(0.2.0)将推送发送到在线客户端
  • 使用pnotify v3 +显示本机desctop或html通知.
  • 正在等待pnotify v4.0.0(作者承诺提供Chrome移动支持.问题)
  • 等待带有SignalR 1.0的.NET Core 2.1将整个项目重写到它.

c# web-push push-api asp.net-core asp.net-core-webapi

25
推荐指数
1
解决办法
2万
查看次数

在ASP.NET Core Web API中注册新的DelegatingHandler

我想创建一个新的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

24
推荐指数
1
解决办法
1万
查看次数

ASP.NET Core Authorize属性不适用于JWT

我想在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)

c# asp.net-core asp.net-core-webapi

24
推荐指数
3
解决办法
2万
查看次数

相当于.net Core webapi 2的HttpResponseException/IHttpActionResponse(不是mvc)

当我阅读关于webapi以响应请求和处理错误时,一切都基于:

IHttpActionResult
HttpResponseException
Run Code Online (Sandbox Code Playgroud)

但是当您创建.net核心webapi项目时,这些项目不可用.我能找到IActionResult,它似乎相当于?

但是我要绕圈试图找出一个非常简单的东西,即如何处理.net核心webapi中的错误,因为HttpResponseException不可用.我得到的印象是"http"中的所有内容,仅适用于完整的MVC应用程序.

我想做的就是返回一个错误,当然它必须简单......

c# asp.net-core asp.net-core-webapi

24
推荐指数
1
解决办法
1万
查看次数

在.NET核心类库中使用依赖注入(.NET标准)

我已经通过链接:

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

23
推荐指数
1
解决办法
2万
查看次数