0

Docker で Azure Function を作成しようとしています。で関数を作成するとfunc new、正常に動作し、 http://localhost:8182/api/HttpTriggerCSharp?name=Johnに移動すると、メッセージが表示されます

こんにちはジョンさん

今、同じプロジェクトを実行しようとしていますが、コードを変更しました。以前のコードは次のとおりです。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static IActionResult Run(HttpRequest req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");

string name = req.Query["name"];

string requestBody = new StreamReader(req.Body).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;

return name != null
    ? (ActionResult)new OkObjectResult($"Hello, {name}")
    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

これが私の新しいコードです:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static IActionResult Run(HttpRequest req, TraceWriter log)
{
	log.Info("C# HTTP trigger function processed a request.");

	// Parsing query parameters
	string name = req.GetQueryNameValuePairs()
	.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
	.Value;
	log.Info("name = " + name);

	string numberOfTerms = req.GetQueryNameValuePairs()
	.FirstOrDefault(q => string.Compare(q.Key, "numberOfTerms", true) == 0)
	.Value;
	log.Info("name = " + numberOfTerms);

	// Validating the parameters received
	if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(numberOfTerms))
	{
	 var errorResponse = req.CreateResponse(HttpStatusCode.BadRequest, 
	                                      "Please pass a name and the number of digits on the query string."); 
	 return errorResponse;
	}

	int termsToShow;
	try
	{
		 termsToShow = Int32.Parse(numberOfTerms);
	}
	 catch (FormatException e)
	{
	 var errorResponse = req.CreateResponse(HttpStatusCode.BadRequest, 
	                                      "The numberOfTerms parameter must be an integer!"); 
	 return errorResponse;
	}

	if (termsToShow < 0 || termsToShow > 100) {
		 var errorResponse = req.CreateResponse(HttpStatusCode.BadRequest, 
	                                      "Please pass a numberOfTerms parameter between 0 and 100."); 
	 return errorResponse;
	}

	// Building the response
	string incompleteResponse = "Hello, " + name + ", you requested the first " + numberOfTerms + " terms of the Fibonacci series. Here they are: ";
	string completeResponse = GenerateFibonacciTerms(incompleteResponse, termsToShow);
	var response = req.CreateResponse(HttpStatusCode.OK, completeResponse); 

	// Returning the HTTP response with the string we created
	log.Info("response = " + response);
	return response;
}

public static string GenerateFibonacciTerms(string incompleteResponse, int termsToShow)
{    
    int a = 0;
    int b = 1;
    string temporalString = "";
    
    for (int i = 0; i < termsToShow; i++)
    {
        int temp = a;
        a = b;
        b = temp + b;
        temporalString = temporalString + temp.ToString() + " ";
    }

	string result = incompleteResponse + temporalString + "- That's it, have an awesome day!";
	return result;    
}

コンテナをビルドして実行すると、次のメッセージが表示されます。 ここに画像の説明を入力

私はすでに VS Code でコードをチェックしており (Sublime Text で行ったので、コード チェックはしていません)、見つかった問題はすべて同じエラーです。 ここに画像の説明を入力

そして、私のコードにはどこにでも「エラー」があります: ここに画像の説明を入力

どうすればこれを解決できますか?

4

1 に答える 1

1

v2 関数コア ツール (.net コアに基づく) を使用していますが、変更したコードは v1 (.net フレームワーク) を対象としています。

したがって、次の 2 つの選択肢があります。

  1. v2 をアンインストールし、機能コア ツール v1 を使用します。
  2. v2 ランタイムで動作するようにコードを変更します。

参考になるコードはこちら。GenerateFibonacciTermsメソッドは変更する必要はありません。

log.Info("C# HTTP trigger function processed a request.");

// Parsing query parameters
string name = req.Query["name"];
log.Info("name = " + name);

string numberOfTerms = req.Query["numberOfTerms"];
log.Info("numberOfTerms = " + numberOfTerms);

// Validating the parameters received
if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(numberOfTerms))
{
    return new BadRequestObjectResult("Please pass a name and the number of digits on the query string."); 
}

int termsToShow;
try
{
     termsToShow = Int32.Parse(numberOfTerms);
}
 catch (FormatException e)
{
    return new BadRequestObjectResult("The numberOfTerms parameter must be an integer!"); 
}

if (termsToShow < 0 || termsToShow > 100) {
     return new BadRequestObjectResult("Please pass a numberOfTerms parameter between 0 and 100."); 
}

// Building the response
string incompleteResponse = "Hello, " + name + ", you requested the first " + numberOfTerms + " terms of the Fibonacci series. Here they are: ";
string completeResponse = GenerateFibonacciTerms(incompleteResponse, termsToShow);
var response = new OkObjectResult(completeResponse); 

// Returning the HTTP response with the string we created
log.Info("response = " + response);
return response;
于 2018-05-14T07:13:10.367 に答える