#c# #azure-functions
#c# #azure-функции
Вопрос:
Я получаю это сообщение об ошибке в моей функции Azure:
‘System.ValueTuple<bool, строка, строка, строка, строка>’ не содержит определения для ‘addedcontactmail’
namespace My.Functions
{
public class Result
{
public bool FunctionSuccessful { get; set; }
public string Errorline1 { get; set; }
public string Errorline2 { get; set; }
public string Errorline3 { get; set; }
public string Errorline4 { get; set; }
}
public static class NewFunction
{
[FunctionName("MyNewFunction")]
public static async Task<dynamic> NewCall(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, ILogger log)
{
var context = await FunctionContext<dynamic>.Create(req);
var args = context.FunctionArgument;
bool functionsuccessful = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
var resultcontactemail = await AddContactEmail(desiredemail, language, clientAPI);
if (resultcontactemail.addedcontactmail == false)
{
functionsuccessful = resultcontactemail.addedcontactmail;
errorline1 = resultcontactemail.errorline1;
errorline2 = resultcontactemail.errorline2;
errorline3 = resultcontactemail.errorline3;
errorline4 = resultcontactemail.errorline4;
return new Result
{
FunctionSuccessful = functionsuccessful,
Errorline1 = errorline1,
Errorline2 = errorline2,
Errorline3 = errorline3,
Errorline4 = errorline4
};
}
}
public static async Task<(bool addedcontactmail, string errorline1, string errorline2, string errorline3, string errorline4)> AddContactEmail(this string emailaddress, string language, PlayFabClientInstanceAPI clientAPI)
{
bool addedcontactmail = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
var request = new PlayFab.ClientModels.AddOrUpdateContactEmailRequest();
request.EmailAddress = emailaddress;
var result = await clientAPI.AddOrUpdateContactEmailAsync(request);
if (result.Error != null)
{
var errors = OnPlayFabError(result.Error, language);
errorline1 = errors[0];
errorline2 = errors[1];
errorline3 = errors[2];
errorline4 = errors[3];
}
else
{
addedcontactmail = true;
}
return (addedcontactmail, errorline1, errorline2, errorline3, errorline4);
}
}
}
Что-то не так со следующей строкой кода?
functionsuccessful = resultcontactemail.addedcontactmail;
«addedcontactmail» и «functionsucccessful» являются bool, почему это не работает?
Я хочу, чтобы «functionsucccessful» получал значение «resultcontactemail.addedcontactmail», оно может быть true или false.
Что именно не так?
Комментарии:
1. Похоже, вы неправильно поняли, как работают кортежи. Ваш кортеж не имеет имени, поэтому вы не можете просто получить к нему такой доступ; сначала вам нужно его распаковать. Я рекомендую вам прочитать learn.microsoft.com/en-us/dotnet/csharp/language-reference /…
2. Я не понимаю, как использовать кортежи в моем коде, чтобы я мог присвоить значение addedcontactmail функции successful .
3. Вы должны прочитать ссылку, которую я опубликовал, она показывает вам, как распаковывать кортежи.
Ответ №1:
Вы неправильно используете AddContactEmail
вызов функции, потому что это расширение string . Ознакомьтесь с приведенным ниже кодом, который я протестировал в своем локальном и работает нормально:
[FunctionName("MyNewFunction")]
public static async Task<dynamic> NewCall(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", "get", Route = null)] HttpRequestMessage req, ILogger log)
{
//var context = await FunctionContext<dynamic>.Create(req);
//var args = context.FunctionArgument;
bool functionsuccessful = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
var resultcontactemail = await desiredemail.AddContactEmail(language, clientAPI);
if (resultcontactemail.addedcontactmail == false)
{
functionsuccessful = resultcontactemail.addedcontactmail;
errorline1 = resultcontactemail.errorline1;
errorline2 = resultcontactemail.errorline2;
errorline3 = resultcontactemail.errorline3;
errorline4 = resultcontactemail.errorline4;
return new Result
{
FunctionSuccessful = functionsuccessful,
Errorline1 = errorline1,
Errorline2 = errorline2,
Errorline3 = errorline3,
Errorline4 = errorline4
};
}
return null;
}
public static async Task<(bool addedcontactmail, string errorline1, string errorline2, string errorline3, string errorline4)> AddContactEmail(this string emailaddress, string language, PlayFabClientInstanceAPI clientAPI)
{
bool addedcontactmail = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
var request = new PlayFab.ClientModels.AddOrUpdateContactEmailRequest();
request.EmailAddress = emailaddress;
var result = await clientAPI.AddOrUpdateContactEmailAsync(request);
if (result.Error != null)
{
var errors = OnPlayFabError(result.Error, language);
errorline1 = errors[0];
errorline2 = errors[1];
errorline3 = errors[2];
errorline4 = errors[3];
}
else
{
addedcontactmail = true;
}
return (addedcontactmail, errorline1, errorline2, errorline3, errorline4);
}
Комментарии:
1. Это не работает. Я получаю сообщение об ошибке в этой строке: var resultcontactemail = ожидание желаемой почты. AddContactEmail(язык, clientAPI); ‘string’ не имеет применимого метода с именем ‘AddContactEmail’, но, похоже, имеет метод расширения с этим именем. Методы расширения не могут быть динамически отправлены. Рассмотрите возможность приведения динамических аргументов или вызова метода расширения без синтаксиса метода расширения.
2. Странно, ты что-нибудь изменил? Потому что это работает в моем локальном.
3. Я скопировал и вставил ваш код, но он не работает. Я всегда получаю сообщение об ошибке в строке: var resultcontactemail = ожидание желаемой почты. AddContactEmail(язык, clientAPI);
4. Можете ли вы попробовать удалить
clientAPI
из определения и вызова метода расширения?