AspNet开发问题二

标签: Asp 分类: Asp 创建时间:2021-03-16 02:48:29 更新时间:2023-10-20 11:23:25

1.“Com.ProHeng.Admin.Users”不扩展类“System.Web.UI.Page”,因此此处不允许

2.反编译Dll

一个历史遗留问题,不知道几年前的程序员,写了一个ASP.net项目,现在人都不知道哪里去了,让我接手开发。给我的代码,我修改了 .ashx 对应的 .ashx.cs文件,甚至删除了这个文件,项目还是依然能够运行。我怀疑是因为cs文件被编译成了.dll文件,而运行使用的是bin下面的dll文件,而不是我修改的ashx文件,这可怎么办呢?给我的代码也不是最新的了。

而且我重新编译这个代码的时候,发现了无法重新构建,因为使用到了dll中的文件错误。

【解决方法】
(1) 下载 reflector
我下载的是 10.3版本,这个版本已经有导出文件的功能了,不需要另外的安装插件什么的,比如:Reflector.FileDisassembler、FileGenerator 这两个插件只能支持早期版本的Reflector,新的装不上了。

(2) 打开要查看的dll文件
安装之后,打开菜单工具栏上的文件夹按钮,选择要查看的dll文件,将其加载进来。

(3) 导出代码
选择要导出代码的dll,然后点击菜单工具栏上的保存按钮,就可以将代码保存成文件。默认的目录是:%UserProfile%\Documents\Reflector\Disassembler\ 目录下,可以换一个目录。这样就可以愉快的重新编译项目,重新部署了。

参考文章:
1.发布以后的dll文件可以还原成cs文件吗 反编译,不过 用refle后,你可以看到代码但是你可以复制出来,然后新建项目
2.Asp.Net中的ashx文件为什么没有编绎(坑爹呀!愿出60分)
3.Reflector使用详解
4.asp.net网站修改aspx.cs文件后如何不替换网站就生效 在修改了web层一些.cs页面的时候,可以用本地调试编译好的dll文件NSP.Web.dll替换服务器上的。就不用再服务器上重新发布了

问题

当然反编译的代码,也不是百分百能直接用的,还是需要进行修改的。
(1) 当前上下文中不存在名称“methodof”
反编译生成的methodof代码,在现有的C#语言中是不支持的。

参考文章:
1..NET(C#):methodof、fieldof和ldtoken 今天在Reflector中看到了methodof關鍵字,很顯然,目前的C#沒有這個關鍵字,

3.功能“内插字符串”在 C# 5 中不可用。请使用6或更高的语言版本。

我是用的是VS2019编辑器,在编译老的项目的时候,总是出现这个问题,我修改了解决方案的.Net版本为4.6,也不行。

【解决方法】
编辑项目的csproj文件,在PropertyGroup节点下添加 LangVersion 语言版本。

1
2
3
<PropertyGroup>
<LangVersion>8.0</LangVersion>
</PropertyGroup>

4.无法识别命名空间

明明在文件夹下有相关的文件,但是打开vscode却找不到,编译的时候,也是出现为引用相关的明明空间,但是使用using指令,又找不到相关的空间。

【解决方法】
编辑项目的 csproj 文件,修改 ItemGroup 节点下面的内容,将cs的路径写入

1
2
3
<ItemGroup>
<Compile Include="Src\Caches\CachedObject.cs" />
</ItemGroup>

5.修改Debug端口

右键网站目录,然后选择属性页,选择 web,修改网址和端口,默认的是5251。

修改之后,可能需要创建虚拟目录,直接点击创建虚拟目录就可以了,至于创建到哪里了,没有深究。

6.命名空间“System.Web”中不存在类型或命名空间名“Http”

我把原先的.NET 4.0的框架,改到了.NET 4.5上,就好了。

7.未能在当前目标框架中解析主引用“System.Net.Http.WebRequest”,它是一个框架程序集。“.NETFramework,Version=v4.0”。若要解决此问题,请移除引用“System.Net.Http.WebRequest”,或将应用程序的目标重新指向包含“System.Net.Http.WebRequest”的框架版本。

8.用户身份认证

9.发起http请求

(1) 异步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static async Task<string> HttpPostAsync(string url, string body = null, string contentType = null, Dictionary<string, string> headers = null, int timeOut = 30)
{
body = body ?? "";
using (HttpClient client = new HttpClient())
{
client.Timeout = new TimeSpan(0, 0, timeOut);
if (headers != null)
{
foreach (var header in headers)
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
using (HttpContent httpContent = new StringContent(body, Encoding.UTF8))
{
if (contentType != null)
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);

HttpResponseMessage response = await client.PostAsync(url, httpContent);
return await response.Content.ReadAsStringAsync();
}
}
}

(2) 同步请求

1
2
HttpResponseMessage response = client.PostAsync(url, httpContent).Result;
String result=response.Content.ReadAsStringAsync().Result;

(3) 解析json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String url = "http://xxx/getUserInfoByToken?tk=" + tk;
using var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));//设置accept标头,告诉JSON是可接受的响应类型
HttpResponseMessage response = client.GetAsync(url).Result;
response.EnsureSuccessStatusCode();
var resp = response.Content.ReadAsStringAsync().Result;
// 解析结果
JObject resj = JObject.Parse(resp);
String status = resj["status"].ToString();
if (status.Equals("200"))
{
JObject content = (JObject)resj["content"];
if (checkAccount(content))
{
String userName = content["WxOpenid"].ToString();
FormsAuthentication.SetAuthCookie(userName, false);

return true;
}
}
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。