小编Bla*_*ell的帖子

使用HttpClient时,避免从异步函数返回类型Task <Object>

我正在使用System.Net.Http.HttpClient.进行HTTP调用.似乎所有调用都必须是异步的.

假设我有以下项目结构:MVC Web App - > Business Layer - > Data Layer

在数据层中,我正在对Web API进行HTTP调用以返回数据,最后我使用如下函数:

public async Task<IList<Product>> GetProducts()
{
     HttpResponseMessage response = await client.GetAsync("api/products");
     string data = await response.Content.ReadAsStringAsync();
     IList<Product> products = JsonConvert.DeserializeObject<IList<Product>>(data);

     return products;
}
Run Code Online (Sandbox Code Playgroud)

然后进入BusinessLayer:

public Task<IList<Product>> GetProducts(string name = null)
{
     return _repository.GetProducts(name);
}
Run Code Online (Sandbox Code Playgroud)

最后在MVC控制器中:

public IActionResult Index()
{
    Task<IList<Product>> ProductsTask = _manager.GetProducts();

    IList<Product> ProductsNonTask = products.Result.ToList();

    return View();
}
Run Code Online (Sandbox Code Playgroud)

我是否真的必须让每个函数返回一个类型列表,Task<IList<Product>>直到我的MVC控制器?正如你在MVC控制器中看到的那样,我必须首先检索产品,并将Task包裹起来.当我通过它查看产品列表时,调试器看起来很奇怪.那么你可以看到我将它们转换为常规的产品列表.

我想知道是否正确的做法是让我的所有函数返回类型Task<IList<Product>>一直到我的MVC控制器,或者如果有一个解决方法,以便我的函数仍然可以返回标准的产品列表但继续使用的异步功能HttpClient

更新:执行以下操作有什么问题:

public IList<Product> GetProducts()
{
     Task<HttpResponseMessage> response …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc httpclient async-await asp.net-web-api

5
推荐指数
1
解决办法
1027
查看次数

在 JavaScript 中获取给定日期范围内的所有日期的列表

我试图弄清楚是否有任何可用的辅助函数或任何可能有助于获取给定日期范围内的日期列表的技术。

假设用户输入以下参数,这将是 2 年合同:
天: 15
开始日期: 2015 年 1 月15
日 结束日期: 2016 年 12 月 15 日

我希望返回该期间内每个月的日期,包括开始月和结束月:

1/15/2015
2/15/2015
3/15/2015
.....
1/15/2016
2/15/2016
3/15/2016
.....
12/15/2016
Run Code Online (Sandbox Code Playgroud)

javascript jquery date

5
推荐指数
1
解决办法
6983
查看次数

创建 TestServer 并使用 XUnit 和 ASP.NET Core 1.0 的依赖注入

我有一个 ASP.NET Core 1.0 解决方案,其项目结构如下:

Web 应用程序 (ASP.NET MVC6)
BusinessLibrary(类库包)
DataLibrary(类库包)测试(带XUnit
的类库包)

我正在尝试在整个系统中使用微软新的内置依赖注入。

以下是当前所有内容如何从我的 ASP.NET MVC 应用程序一直流向我的存储库层

//Startup.cs of MVC Web App
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddSingleton(_=> Configuration);

    services.AddTransient<ICustomerService, CustomerService>();
    services.AddTransient<ICustomerRepository, CustomerRepository>();
}

public class CustomersController : Controller
{
    private ICustomerService _service;
    public CustomersController(ICustomerService service)
    {
        _service= service;
    }
}

public class CustomerService : ICustomerService
{
    private ICustomerRepository _repository;
    public PriceProtectionManager(ICustomerRepository repository)
    {
        _repository = repository;
    }
}

public class CustomerRepository : BaseRepository, …
Run Code Online (Sandbox Code Playgroud)

c# asp.net xunit asp.net-core asp.net-core-1.0

5
推荐指数
1
解决办法
5043
查看次数

在VS2015 SQL Server数据库项目中通过UI创建外键关系

我在 VS2015 中的解决方案中添加了一个新的 SQL Server 数据库项目。我将所有表格添加到该项目中。

我现在正在尝试弄清楚如何最好通过 UI 将外键添加到项目中。

我在表设计器中,在右侧单击外键,然后添加新的。这添加了一个新的外键,但是当我转到它的属性时,我无法设置列和表。一切都变灰了。

T-SQL 看起来像这样:

CONSTRAINT [FK_Product_ToTable] 
     FOREIGN KEY ([Column]) REFERENCES [ToTable]([ToTableColumn]) 
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地将参数替换为 T-SQL 窗格中的正确信息,但是有没有办法完全通过 UI 来完成此操作并让 T-SQL 自行更新?

database sql-server database-project visual-studio visual-studio-2015

5
推荐指数
1
解决办法
4349
查看次数

将IHttpContextAccessor注入ApplicationDbContext ASP.NET Core 1.0

我试图弄清楚如何访问ASP.NET控制器之外的当前登录用户名.

例如,我试图这样做:

使用实体框架代码自动跟踪创建和修改字段

设置跟踪实体的跟踪DbContext.

这是我的,ApplicationDbContext但我一直收到错误的说法_httpContextAccessornull:

private readonly IHttpContextAccessor _httpContextAccessor;

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor)
    : base(options)
{
    _httpContextAccessor = httpContextAccessor;
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework asp.net-core-mvc asp.net-core asp.net-core-1.0

5
推荐指数
2
解决办法
5670
查看次数

向 HttpDelete 操作发送 DELETE 请求时路由不起作用

我有一个只有一个视图的 ProductsController - Index.cshtml。

以下 3 个操作方法位于此控制器内部:

//http://localhost:55555/products
[HttpGet]
public IActionResult Index()
{
}

//http://localhost:55555/products
[HttpPost]
public IActionResult Index(ProductViewModel product)
{
}

//http://localhost:55555/products/1
[HttpDelete("{id}")]
public IActionResult Index([FromRoute] int id)
{
}
Run Code Online (Sandbox Code Playgroud)

当我转到 /products 时,Get 工作得很好。当我使用 /products 创建新产品时,Post 工作得非常好。删除根本不起作用,我在 /products/9 中找不到 404。我正在使用标准的 AJAX 请求,类型为:DELETE。

我正在使用默认的 MVC 常规路由设置:

        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
Run Code Online (Sandbox Code Playgroud)

这是我的 AJAX 请求的样子:

$(".js-delete-product").click(function () {
    $.ajax({
        type: "DELETE",
        url: "products/" + $(this).data("id"),
        success: onDeleteSuccess
    });
});
Run Code Online (Sandbox Code Playgroud)

我还尝试在邮递员中向http://localhost:55555/products/1发送 DELETE 请求,以确保它不是我的 jquery ajax 并且仍然找不到 404。

更新: 如果我仅向http://localhost:55555/products …

c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller asp.net-core-mvc

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

创建具有固定标题,固定侧栏导航,使用flexbox固定内容的布局

我正在使用FlexBox为Web应用程序创建布局.请注意,我不是为了这个而尝试使用bootstrap.我只想在普通的flexbox css中做到这一点.

这是我想要的结构:

第1行:固定标题,高64像素.第2行:修复了侧面占据250px左侧的固定侧面,固定内容占据了右侧的剩余部分.

<div id="row1">
     <div class="header"></div>
</div>
<div id="row2">
     <div class="sidenav"></div>
     <div class="main-content"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这里的关键是sidenav和main-content应该都是100%的屏幕,并带有自己的滚动条.实际的浏览器滚动条不应该水平或垂直显示.

html javascript css css3 flexbox

5
推荐指数
1
解决办法
670
查看次数

当已经在组件上时,Angular router.navigate w/routeguard 不起作用

我试图找出为什么下面的 router.navigate(['']) 代码不将用户带到登录组件。我只停留在家庭组件上。当我添加调试器时;从代码来看,它似乎进入了某种无限循环。

流程如下: 由于 Route Guard 失败,用户来到站点并立即被重定向到 /login。如果他们登录,Route Guard 就会通过并转到 [' '],即 HomeComponent。然后,当他们单击注销时,我认为导航到 [' '] 应该会失败,只需转到 /login。由于某种原因,它停留在 HomeComponent 上并且从不导航。

home.component.ts

  logout() {
    this.userService.logout();
    this.router.navigate(['']);
  }
Run Code Online (Sandbox Code Playgroud)

用户服务.ts

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let url: string = state.url;
    return this.verifyLogin(url);
  }

  verifyLogin(url: string): boolean {
    if (this.userLoggedIn) { return true; }

    this.router.navigate(['/login']);
    return false;
  }

  logout() {
    this.userLoggedIn = false;
  }
Run Code Online (Sandbox Code Playgroud)

应用程序路由.module.ts

const routes: Routes = [
    { path: '' , component: HomeComponent, canActivate: [UserService]},
    { path: 'login', component: LoginComponent …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular-routing angular-components angular

5
推荐指数
1
解决办法
5725
查看次数

ASP.NET Core Spa Angular模板与IdentityServer4相结合,用于身份验证/授权

有人可以给我一个简短的解释,说明如何使用AspNetCore Angular Spa模板将ASP.NET核心身份与ASP.NET Core Angular 4应用程序结合使用.

我完全将IdentityServer4设置为自己的项目,并使用ASP.NET身份.我使用IdentityServer4 UI创建了一些用户.我现在在数据库的AspNet表中看到这些用户.

我将ASP.NET Core Angular 4应用程序添加为IdentityServer4的客户端.这样它就可以与之交谈.我在HomeController中添加了[Authorize]属性,因此除非已登录,否则无法访问Angular 4页面.用户将自动轻触到IdentityServer4进行登录.登录后,他们会回到Angular UI.

现在我想更进一步说这个用户只能访问这个(授权).假设我向数据库中的一个用户添加了一堆声明.Angular 4中的服务调用Api来获取数据.我在这个api中的一个方法中添加了这样的属性:

[Authorize(Policy = "Employees")]
Run Code Online (Sandbox Code Playgroud)

当Angular 4服务使用http.get调用此方法时,我无法访问它.我相信这是因为Angular 4对此用户声称的内容一无所知.有没有办法合并所有这些,所以它工作或我卡在前端与oidc-client进行所有身份验证/授权.

我应该使用基于角色的授权吗?基于声明的授权?什么最适合Api和Angular前端?

asp.net asp.net-identity asp.net-core identityserver4 angular

5
推荐指数
0
解决办法
727
查看次数

让PHP站点指向与代码中的路径不同的路径

我在Windows上使用Wampserver运行PHP站点.整个站点都有一条硬编码线,例如:

$settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);
Run Code Online (Sandbox Code Playgroud)

我知道这是一个不好的做法,但它不受我的控制.

当网站运行时,有什么方法可以欺骗网站指向C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini代码/usr/local/apache2/myconfigs/settings.ini在parse_ini_file函数中查找的时间?

php linux xampp wamp wampserver

5
推荐指数
1
解决办法
194
查看次数