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监听服务,如果报错需要管理员权限,需要检查你的监听连接

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

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

当前时间:2023/4/17 15:13:15
异常信息:拒绝访问。
异常对象:System
调用堆栈:
在 System.Net.HttpListener.AddAllPrefixes()
   在 System.Net.HttpListener.Start()
触发方法: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的命令行的启动信息

public static void test(string fileName, string arguments)
{
    Process p = new Process();
    p.StartInfo = new ProcessStartInfo(fileName);
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.Arguments = arguments;
    p.Start();
}

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

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

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

class Program
{
        [DllImport("user32.dll")]
        private static extern int ShowWindow(int Handle, int showState);

        [DllImport("kernel32.dll")]
        public static extern int GetConsoleWindow();

        static void Main(string[] args)
        {
            // 隐藏黑框
            int win = GetConsoleWindow();
            ShowWindow(win, 0);
        }
}

6、http请求超时

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

request.ServicePoint.Expect100Continue = false;

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值