C# TLSharp数据中心(dc)异常

C# TLSharp数据中心(dc)异常,c#,api,telegram,C#,Api,Telegram,我正在使用库来实现一个自定义电报客户端。当我运行下面的代码时: public async Task<string> SendCodeRequest(string phoneNumber) { var completed = false; TL.AuthSendCodeRequest request = null; while (!completed) { request = new T

我正在使用库来实现一个自定义电报客户端。当我运行下面的代码时:

public async Task<string> SendCodeRequest(string phoneNumber)
    {
        var completed = false;

        TL.AuthSendCodeRequest request = null;

        while (!completed)
        {
            request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
            await _sender.Send(request);
            await _sender.Receive(request);

            completed = true;
        }

        // TODO handle other types (such as SMS)
        if (request.Result is TL.AuthSentCodeType)
        {
            var result = (TL.AuthSentCodeType)request.Result;
            return result.PhoneCodeHash;
        }
        else
        {
            var result = (TL.AuthSentAppCodeType)request.Result;
            return result.PhoneCodeHash;
        }

    }
公共异步任务SendCodeRequest(字符串phoneNumber)
{
var completed=假;
TL.AuthSendCodeRequest请求=null;
而(!已完成)
{
请求=新的TL.AuthSendCodeRequest(电话号码,5,_apid,_apiHash,“en”);
等待发送方发送(请求);
等待发送方。接收(请求);
完成=正确;
}
//TODO处理其他类型(如SMS)
if(request.Result为TL.AuthSentCodeType)
{
var result=(TL.AuthSentCodeType)request.result;
返回result.PhoneCodeHash;
}
其他的
{
var result=(TL.AuthSentAppCodeType)request.result;
返回result.PhoneCodeHash;
}
}
我提出以下例外情况:

您的电话号码已注册到{dcIdx}dc。请更新设置。 寻找 细节

提到的github页面说TLSharp自己处理这些异常。所以我猜库核心出了问题,因为代码应该自己解析数据中心IP,而不是生成异常


任何帮助都将不胜感激

TlSharp当前不处理此异常您必须捕获异常并获取数据中心编号,然后尝试使用ReconnectToDc()函数重新连接到数据中心

MtProtoSender.cs文件中,您可以找到生成异常的以下代码行:

throw new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
将其替换为以下代码,以便生成的异常具有连接到它所需的数据中心编号

InvalidOperationException exception = new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
exception.Data.Add("dcId", dcIdx);
throw exception;
按如下方式更改代码:

while (!completed)
{
    request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
    try
    {
        await _sender.Send(request);
        await _sender.Receive(request);

        completed = true;
    }
    catch (InvalidOperationException ex)
    {
        if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
        {
            await ReconnectToDc((int)ex.Data["dcId"]);
        }
        else
        {
            throw;
        }
    }
}

在上面的代码中,附加到异常的数据中心编号用于重新连接到数据中心。

TlSharp当前不处理此异常,您必须捕获异常并获取数据中心编号,然后尝试使用ReconnectToDc()函数重新连接到数据中心

MtProtoSender.cs文件中,您可以找到生成异常的以下代码行:

throw new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
将其替换为以下代码,以便生成的异常具有连接到它所需的数据中心编号

InvalidOperationException exception = new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
exception.Data.Add("dcId", dcIdx);
throw exception;
按如下方式更改代码:

while (!completed)
{
    request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
    try
    {
        await _sender.Send(request);
        await _sender.Receive(request);

        completed = true;
    }
    catch (InvalidOperationException ex)
    {
        if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
        {
            await ReconnectToDc((int)ex.Data["dcId"]);
        }
        else
        {
            throw;
        }
    }
}

在上面的代码中,附加到异常的数据中心号码用于重新连接到数据中心。

您的电话号码可能不是电报所接受的格式


电话号码必须以加号开头,请使用国家代码和电话号码,不要有空格,例如:+989333333

您的电话号码可能不是电报所接受的格式

电话号码必须以加号开头,请使用国家/地区代码和电话号码,不要有空格,例如:+989333333