小编spe*_*son的帖子

SSH.Net异步文件下载

我试图使用SSH.NET从SFTP服务器异步下载文件.如果我同步执行它,它工作正常,但当我执行异步时,我得到空文件.这是我的代码:

var port = 22;
string host = "localhost";
string username = "user";
string password = "password";
string localPath = @"C:\temp";

using (var client = new SftpClient(host, port, username, password))
{
    client.Connect();
    var files = client.ListDirectory("");

    var tasks = new List<Task>();

    foreach (var file in files)
    {                        
        using (var saveFile = File.OpenWrite(localPath + "\\" + file.Name))
        {
            //sftp.DownloadFile(file.FullName,saveFile); <-- This works fine
            tasks.Add(Task.Factory.FromAsync(client.BeginDownloadFile(file.FullName, saveFile), client.EndDownloadFile));
        }                        
    }

    await Task.WhenAll(tasks);
    client.Disconnect();

}
Run Code Online (Sandbox Code Playgroud)

c# sftp asynchronous ssh.net

10
推荐指数
1
解决办法
7307
查看次数

无法在Web Api 2中的BadRequest上获取错误消息

我已经google了很多搜索我的问题的答案没有运气所以,让我们尝试,如果别人可以帮助我.

在进行一些验证后,我有一个Web Api 2操作来注册用户.如果一切正常,它将返回序列化用户,如果没有,则返回BadRequest响应中发送的错误消息.

另一方面,我有一个WPF客户端调用API进行响应.

我的问题是我无法得到错误发送的原因,客户端只是得到Bad Request错误消息.

这是代码的一部分:

  • Web Api动作:

    public async Task<IHttpActionResult> AddUser(NewUserDTO {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        if (!model.IdCliente.HasValue)
        {
            ModelState.AddModelError("", "No existe el cliente");
            return BadRequest(ModelState);
        }
        // do save stuff
        return Ok(TheModelFactory.Create(user));
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 客户端功能:

    public async Task<ApplicationUserDTO> AddUser(NewUserDTO dto) {
        using (var client = new HttpClient()) {
            client.BaseAddress = new Uri(_urlBase);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Token);
            HttpContent content = new StringContent(JsonConvert.SerializeObject(dto));
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            HttpResponseMessage responseMessage = await client.PostAsync("api/accounts/AddUser", content); …
    Run Code Online (Sandbox Code Playgroud)

c# error-handling response bad-request asp.net-web-api2

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

如何组合List <string>中的项目以有效地创建新项目

我有一个案例,我有一个对象的名称和一堆文件名.我需要将正确的文件名与对象匹配.文件名可以包含数字和单词,用连字符( - )或下划线(_)分隔.我无法控制文件名或对象名.例如:

10-11-12_001_002_003_13001_13002_this_is_an_example.svg
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对象名称只是一个字符串,表示一个数字

10001
Run Code Online (Sandbox Code Playgroud)

如果文件名与对象名匹配,我需要返回true或false.文件名的不同段可以单独匹配,也可以两个段的任意组合匹配.在上面的例子中,对于以下情况应该是这样(不是每个真实情况,只是例子):

10001
10002
10003
11001
11002
11003
12001
12002
12003
13001
13002
Run Code Online (Sandbox Code Playgroud)

并且,我们应该为此案件(其中包括)返回false:

13003
Run Code Online (Sandbox Code Playgroud)

到目前为止我想出的是:

public bool IsMatch(string filename, string objectname)
{
    var namesegments = GetNameSegments(filename);
    var match = namesegments.Contains(objectname);
    return match;
}

public static List<string> GetNameSegments(string filename)
{
    var segments = filename.Split('_', '-').ToList();

    var newSegments = new List<string>();
    foreach (var segment in segments)
    {
        foreach (var segment2 in segments)
        {
            if (segment == segment2)
                continue;

            var newToken = segment + segment2;
            newSegments.Add(newToken);
        } …
Run Code Online (Sandbox Code Playgroud)

.net c#

7
推荐指数
2
解决办法
414
查看次数

Reactjs组件显示旧数据

我有一个应该显示项目列表的组件。首次加载组件时,将从API提取项目,然后应在用户单击按钮时刷新/替换项目。

问题是,我的组件似乎总是落后于用户一步。例如,用户第一次单击该按钮时,将调用API并返回新数据,但是该组件仍显示其在初始加载时获得的数据。用户第二次单击时,我的组件将显示第一次单击时返回的数据。

我认为单击按钮后即可快速将组件重新加载,因此显示组件时状态不会更新,但是我不知道如何解决?

我的组件:

import React, {Component} from 'react';
import {connect} from 'react-redux';
import {matchesFetchData} from '../actions/matches';
import Match from './match';


class MatchList extends Component {
    constructor(){
        super();
        this.generateNew = this.generateNew.bind(this);
    }  

    componentDidMount() {
        this.props.fetchData('http://localhost:4752/api/matches');
    }

    render() {
        if (this.props.hasErrored) {
            return <p>Sorry!There was an error loading the items</p>;
        }
        if (this.props.isLoading) {
            return <p>Loading…</p>;
        }

        return (   
            <div>
                <nav className="menu">
                    <input type="number" defaultValue="0" min="0" max="13" ref="safeguards"/>      
                    <button className="generateNew" onClick={this.generateNew}>Ny</button>         
                </nav>
                <ul className="matchlist">
                    {this.props.matches.map(function (match, index) {                        
                        return <Match key={index} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-redux

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