以下这些是最近在重构ExUnitTest项目中遇到的一些比较有意思的问题
1. "Explicit" (C++ Key Word),用于构造函数前,以关闭隐式的类型转换
class CDemo {
int value;
public:
CDemo(char * p) { }
//~CDemo() { } // no meanful, extra load will be added, comment out.
CDemo& operator +(const CDemo &right) {
//…
return *this;
}
CDemo& operator +(char * p) {
//…
return *this;
}
};
int value;
public:
CDemo(char * p) { }
//~CDemo() { } // no meanful, extra load will be added, comment out.
CDemo& operator +(const CDemo &right) {
//…
return *this;
}
CDemo& operator +(char * p) {
//…
return *this;
}
};
CDemo a; a = a +"3"; // 试问两个+运算符,会调用哪个? 如果加上Explicit又会怎样?有兴趣的人自己写代码去试试。哈哈~~
2. HTTP 405 & 500 Error Code
在测试LibCurl发送的类时,我曾企图写一个ASPX页来接受处理MC3发出的请求,结果先后出现了如上两个Status Code。
- 405是Resource Not Allowed Error,说明IIS无法处理请求所对应的资源。原因是我设置的URL资源后缀在IIS上没有未映射过(Mapped)。IIS只支持Get可以访问未映射的资源,而Post, Head都不可以。
- 500是服务器内部错误。原因是MC3发送给ASPX页面的Request中的contenta并不是ASP.NET所能识别的数据,所以ASP.NET在解析的时候就发生错误。解决的方法是使用Generic HttpHandler(.ashx),这样http的请求就都可以在服务器上处理了。