• C# 问题记录


    1、浏览器跨域调起本地写的http服务,报错

    Failed to load http://x.x.x.x:xxx: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://x.x.x.x' is therefore not allowed access

    这个貌似是跟服务端有关,只需要本地的http服务的响应加上头部

    Access-Control-Allow-Origin*

    表示服务端允许跨域请求

    Access-Control-Allow-Origin - HTTP | MDN

     2、关于本地启动http监听服务,如果报错需要管理员权限,需要检查你的监听连接

    1. httpObj = new HttpListener();
    2. httpObj.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
    3. httpObj.Prefixes.Add("http://+:8080/test/");

    如果监听的是 http://+:8080,如果带上了加号,就需要管理员权限执行,不然报错

    1. 当前时间:2023/4/17 15:13:15
    2. 异常信息:拒绝访问。
    3. 异常对象:System
    4. 调用堆栈:
    5. 在 System.Net.HttpListener.AddAllPrefixes()
    6. 在 System.Net.HttpListener.Start()
    7. 触发方法:Void AddAllPrefixes()

    解决办法:

    ① 管理员权限运行exe

    ② 使用127.0.0.1代替+号

    ③ 加白接口

    管理员执行命令

    netsh http add urlacl url=http://127.0.0.1:80/test user=Everyone

    中间的ip、端口、接口可以换,相当于是加白

    删除加白使用

    netsh http delete urlacl url=http://127.0.0.1:80/test
    

    查看当前加白名单

    netsh http show urlacl

    .net - c#: HttpListener setup on https without admin rights - Stack Overflow

    3、C# 请求的操作需要提升

    说明你启动的应用需要管理员权限

    如果只需要将A应用标记为需要管理员权限才能启动(图标上有个盾),需要修改manifest,参照

    C#程序设置以管理员权限运行_小鹰信息技术服务部的博客-CSDN博客_c# 管理员权限

    如果说,我先启动一个A应用(非管理员权限启动),我想要A应用(以管理员权限)拉起B应用,因为B应用需要管理员权限,就需要在启动信息(A应用使用Process.start时)中添加 

    Verb = "runas"

     但是不能选择隐藏窗口,即下面这个选项要打开,下面选项不能为false

    UseShellExecute = true

    C# 调用Process.Start 请求的操作需要提升解决方案|C/S框架网

    c# - Elevating privileges doesn't work with UseShellExecute=false - Stack Overflow

    4、使用 visual studio installer 打包时,设置安装时启动某个应用

    c# - Visual Studio Installer > How To Launch App at End of Installer - Stack Overflow

    右键安装项目,view->自定义启动条件 ,右键commit添加文件,这些文件得是安装包里带的(添加安装包文件,前面选择 add-> 文件),这个文件的 InstallerClass 属性需要为 false

    5、C#程序后台启动

    ①应用A启动应用B,希望B不要出现命令行的窗口,需要在A设置B的命令行的启动信息

    1. public static void test(string fileName, string arguments)
    2. {
    3. Process p = new Process();
    4. p.StartInfo = new ProcessStartInfo(fileName);
    5. p.StartInfo.CreateNoWindow = true;
    6. p.StartInfo.UseShellExecute = false;
    7. p.StartInfo.Arguments = arguments;
    8. p.Start();
    9. }

    ②我想启动A的时候就不出现命令行窗口

    需要右键项目属性,检查是不是windows应用程序,如果是控制台程序必弹命令行窗口

    或者使用下面代码在启动后控制台程序后,隐藏黑框

    1. class Program
    2. {
    3. [DllImport("user32.dll")]
    4. private static extern int ShowWindow(int Handle, int showState);
    5. [DllImport("kernel32.dll")]
    6. public static extern int GetConsoleWindow();
    7. static void Main(string[] args)
    8. {
    9. // 隐藏黑框
    10. int win = GetConsoleWindow();
    11. ShowWindow(win, 0);
    12. }
    13. }

    6、http请求超时

    我用C#写的http客户端请求老是超时,开始我还以为是服务器问题,但是postman不会,原因好像是要设置Expect100Continue

    request.ServicePoint.Expect100Continue = false;

    C# HttpWebRequest 请求遇到最坑(史上最坑)的一个问题,分析加解决方案 - 知乎

    (此外,我另外写了一个http服务端,命令行黑框启动的,每次服务端阻塞超时的时候,我就得去黑框按下一个键,就会放开这次阻塞的请求,服了,目前感觉像是机器卡顿加反复请求的时候才会出现上面的情况,原因目前不清楚)

    7、Dictionary类型的变量不能 add 相同的 key,否则阻塞或者报错

    1. System.ArgumentException
    2. HResult=0x80070057
    3. Message=已添加了具有相同键的项。
    4. Source=mscorlib
    5. StackTrace:
    6. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
    7. at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
    8. at test.Program.Main(String[] args) in
    9. Program.cs:line 47

  • 相关阅读:
    【TypeScript】中接口的详细介绍
    企业实战之阿里druid统一监控方案,你了解吗?
    windows服务器通过nginx配置https
    接口的详解
    等额本金和等额本息还款方式的差异分析
    【4天快速入门Python数据挖掘之第2天】Numpy——高效的运算工具
    react多条件查询
    从两个易错的笔试题深入理解自增运算符
    Linux磁盘分区和管理
    基于Unity设计的井字棋小游戏
  • 原文地址:https://blog.csdn.net/qq_38781075/article/details/127880892