You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET中实现带Token验证的CSV文件批量上传

正确的.NET CSV上传+Token传递实现方案

我来帮你搞定这个问题!你遇到的核心问题应该是Token的传递位置不符合PHP脚本的预期——毕竟试了多种.NET上传方式都被跳转到登录,说明服务端没正确识别到Token。下面我会给出两种最常用的正确实现方式,你可以根据PHP脚本的Token接收逻辑来选择。

先明确关键前提

首先得确认你的PHP脚本是怎么接收Token的:

  • 是从请求头里读取(比如$_SERVER['HTTP_X_TOKEN'])?
  • 还是从POST表单字段里读取(比如$_POST['token'])?

这两种情况的.NET实现方式完全不同,下面分别给出示例:


情况1:Token通过请求头传递(比如自定义X-Token头)

如果PHP脚本是从请求头获取Token,用HttpClient + MultipartFormDataContent的实现如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class CsvUploader
{
    static async Task Main(string[] args)
    {
        // 替换成你的实际参数
        var uploadUrl = "https://your-php-api.com/upload";
        var authToken = "your-unique-token-here";
        var csvFilePaths = new[] { "./data1.csv", "./data2.csv" }; // 单个或多个文件都可以

        using (var httpClient = new HttpClient())
        {
            // 把Token添加到请求头(这里的X-Token要和PHP脚本约定的头名一致)
            httpClient.DefaultRequestHeaders.Add("X-Token", authToken);

            using (var multipartContent = new MultipartFormDataContent())
            {
                // 逐个添加CSV文件
                foreach (var filePath in csvFilePaths)
                {
                    var fileBytes = System.IO.File.ReadAllBytes(filePath);
                    var fileContent = new ByteArrayContent(fileBytes);
                    // 设置文件的MIME类型,确保PHP能识别为CSV
                    fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/csv");
                    
                    // 这里的"files"要和PHP脚本接收文件的表单字段名一致(比如PHP用$_FILES['files']就填"files")
                    multipartContent.Add(fileContent, "files", System.IO.Path.GetFileName(filePath));
                }

                // 发送上传请求
                var response = await httpClient.PostAsync(uploadUrl, multipartContent);
                // 强制检查请求是否成功(如果失败会抛出异常,方便排查)
                response.EnsureSuccessStatusCode();

                // 读取响应内容
                var result = await response.Content.ReadAsStringAsync();
                Console.WriteLine("上传结果:" + result);
            }
        }
    }
}

情况2:Token作为POST表单字段传递

如果PHP脚本是从POST表单里获取Token(比如$_POST['token']),只需要把Token作为一个表单字段添加到MultipartFormDataContent里即可:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class CsvUploader
{
    static async Task Main(string[] args)
    {
        var uploadUrl = "https://your-php-api.com/upload";
        var authToken = "your-unique-token-here";
        var csvFilePaths = new[] { "./data1.csv", "./data2.csv" };

        using (var httpClient = new HttpClient())
        {
            using (var multipartContent = new MultipartFormDataContent())
            {
                // 添加Token表单字段(字段名"token"要和PHP脚本约定的一致)
                multipartContent.Add(new StringContent(authToken), "token");

                // 添加CSV文件(和上面的逻辑一致)
                foreach (var filePath in csvFilePaths)
                {
                    var fileBytes = System.IO.File.ReadAllBytes(filePath);
                    var fileContent = new ByteArrayContent(fileBytes);
                    fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/csv");
                    multipartContent.Add(fileContent, "files", System.IO.Path.GetFileName(filePath));
                }

                var response = await httpClient.PostAsync(uploadUrl, multipartContent);
                response.EnsureSuccessStatusCode();

                var result = await response.Content.ReadAsStringAsync();
                Console.WriteLine("上传结果:" + result);
            }
        }
    }
}

额外排查技巧

如果还是被跳转到登录,可以试试这两个方法:

  1. 禁用自动重定向:默认HttpClient会自动跟随3xx重定向,禁用后可以看到原始响应,判断是Token无效还是传递方式不对:
    var handler = new HttpClientHandler { AllowAutoRedirect = false };
    using (var httpClient = new HttpClient(handler))
    {
        // 后续代码不变
    }
    
  2. 对比PHP脚本的正常请求:用Postman模拟一次正常的上传请求,查看请求头和表单数据的结构,确保.NET代码生成的请求和Postman的完全一致。

内容的提问来源于stack exchange,提问作者DirtyBit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:48