在isapi中以下url怎么映射参数?

DataBind 2005-08-05 02:13:45
http://localhost/Test.dll/dosomething?Onlyatesthere
我知道标准语法如下:
http://localhost/Test.dll?dosomething?Onlyatesthere

可是,我现在就要用"/",原来的程序delphi的。不知怎么改!

我添加映射部分
ON_PARSE_COMMAND(dosomething, CTestExtension, ITS_PSTR)
ON_PARSE_COMMAND_PARAMS("string")

void CTestExtension::Url(CHttpServerContext* pCtxt, LPCTSTR pstr1)
{
*pCtxt << pCtxt->m_pECB->lpszQueryString ;
*pCtxt << "|";
*pCtxt << pstr1;
}
...全文
169 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DataBind 2005-08-05
  • 打赏
  • 举报
回复
太感谢了!救命恩人!
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
Test.dll写好后,将它添加到IIS筛选器中,和IIS一起运行
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
DWORD CTestFilter::OnPreprocHeaders(CHttpFilterContext* pfc, PHTTP_FILTER_PREPROC_HEADERS pHeaders)
{
char buf[1024];
DWORD cbUrl = sizeof(buf);
pHeaderInfo->GetHeader(pCtxt->m_pFC,"url", buf, &cbUrl);
strlwr(buf);
char * p=strstr(buf,"test.dll/");
if(p != NULL)
{
while(p[0] != '/') p++;
p[0]='?';
pHeaderInfo->SetHeader(pCtxt->m_pFC, "url", buf);
}
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
sorry!
经测试,
http://localhost/Test.dll/Url?sfjsakldfdsfdsafdasf
这个请求可以指向Test.dll,但是Url接口不会被调用

实现这样一个Filter很简单
只需要定义:
DWORD CTestFilter::OnPreprocHeaders(CHttpFilterContext* pfc, PHTTP_FILTER_PREPROC_HEADERS pHeaders)
{
char buf[1024];
DWORD cbUrl = sizeof(buf);
cbUrl=1024;
pHeaderInfo->GetHeader(pCtxt->m_pFC,"url", buf, &cbUrl);
strlwr(buf);
char * p=strstr(buf,"test.dll/");
if(p != NULL)
{
while(p[0] != '/') p++;
p[0]='?';
}
pHeaderInfo->SetHeader(pCtxt->m_pFC, "url", buf);
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
DataBind 2005-08-05
  • 打赏
  • 举报
回复
看来我要实现一个OnReadRawData的筛选器来改写url了。是不是没有其他方法了!
DataBind 2005-08-05
  • 打赏
  • 举报
回复
谢谢
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
http://localhost/Test.dll/Url?sfjsakldfdsfdsafdasf
这个命令的解析将为:
请求localhost网站根目录下test.dll子目录中的url资源,
querystring中的内容为:sfjsakldfdsfdsafdasf
method为get
不会解析到test.dll extension
另外, isapi通常放在一个没有读取属性,只有执行属性的子目录中,放在根目录中是不合适的
DataBind 2005-08-05
  • 打赏
  • 举报
回复
http://localhost/Test.dll/Url?sfjsakldfdsfdsafdasf
这个url的命令会被解释成Url吗?
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
如果你要保持这样的请求方式:http://localhost/Test.dll/dosomething?Onlyatesthere
有点麻烦,
可能唯一的办法就是在你的Test.dll里实现一个Filter,重新构造用户请求
ok1234567 2005-08-05
  • 打赏
  • 举报
回复
ISAPI 处理回传数据(post & get)
其一,映射,系统自动解析name=value,最好使用默认值,浏览器提供参数时不能多于接口定义!!!
ON_PARSE_COMMAND(Url, CTestExtension, ITS_PSTR)
ON_PARSE_COMMAND_PARAMS("string=")

url:http://localhost/Test.dll?Url&string=yourstring
或者:http://localhost/Test.dll?Url (使用默认值,空串)

其二,接受原始数据,自己解析,比较麻烦,但扩展性好
映射:ON_PARSE_COMMAND(Url, CTestExtension, ITS_RAW)
函数:void CTestExtension::Url(CHttpServerContext* pCtxt, void *pVoid, DWORD dwBytes)
自己解析pVoid,注意Unicode转换
url:http://localhost/Test.dll?Url&string=yourstring
怎么定义也不会找不到接口Url


18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧