![](/img/trans.png)
[英]How do I prevent IE save file dialog when using fileupload in asp.net mvc
[英]Delphi SOAP call shows IE login dialog - how to prevent it?
我们有两个应用程序。 他们使用 SOAP 协议调用网站。
其中一位在我们的登录表单中询问了登录数据; 另一个是后台进程,定时任务。 他们都使用 InternetSetOption 进行基本身份验证。
如果用户输入错误的用户名或密码,SOAP 调用将显示一个 IE 对话框以再次获取用户名/密码。
1.) 这不是我们的风格。 2.) 对话框是“无限”的,它会问,只有成功或取消才能退出重播。 3.) 我们无法控制,会出现多少次。 4.) 在后台进程中,对话框停止进程 - 这很关键。
所以我需要一些选项或事件来防止显示 IE 登录对话框。
如果登录名/密码错误,程序必须以 401 中止,而不会无限显示 IE 对话框。
我怎样才能做到这一点?
请帮助一些代码。 谢谢!
部分代码。 但我认为它没有太大帮助。 这是一个带有基本身份验证的简单 SOAP 调用。 但是如果登录不正确,IE 会显示他的对话框。
type TWSRIO = class(THTTPRIO)
...
end;
procedure TWSRIO.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data:Pointer);
begin
if Auth_Mod = SCRBRIO_Auth_Basic then
begin
if not InternetSetOption(Data,INTERNET_OPTION_USERNAME,PChar(FAuth_LoginName), Length(FAuth_LoginName)) then
raise Exception.Create(SysErrorMessage(GetLastError));
if not InternetSetOption(Data, INTERNET_OPTION_PASSWORD, PChar(FAuth_Password), Length(FAuth_Password)) then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
end;
procedure TForm1.Test;
begin
RIO := TWSRIO.Create(Self);
RIO.Auth_Mode := SCRBRIO_Auth_Basic;
RIO.Auth_LoginName := xxx;
RIO.Auth_Password := yyy;
...
o := GetStockQueryResponderInterface(False, GetURL(), RIO);
o.GetStockQuery(sArtNr)
...
end;
也许解决办法是:
function TMyRIO.MyWiniNetError(LastError: DWord; Request: Pointer): DWord;
var
OWEProc: TWinInetErrorEvent;
begin
// When the LastError is zero, we return same code what the dialog does on Cancel
if LastError = 0 then
begin
Result := ERROR_SUCCESS;
Exit;
end;
if Assigned(HTTPWebNode) then
begin
try
// Save old proc and set to nil for Avoid infinite loop
OWEProc := Self.HTTPWebNode.OnWinInetError;
Self.HTTPWebNode.OnWinInetError := nil;
try
// Call the original handler
Result := Self.HTTPWebNode.HandleWinInetError(LastError, Request, True);
finally
// Restore our handler
Self.HTTPWebNode.OnWinInetError := OWEProc;
end;
except
on E: Exception do
begin
// On error we log the problem
LogThis(E.Message);
Result := ERROR_SUCCESS;
Exit;
end;
end;
end else
begin
Result := ERROR_SUCCESS;
Exit;
end;
end;
我不知道我们会得到什么样的副作用。 但是使用此代码,我无法通过错误的身份验证获得 Windows 登录对话框。 只是错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.