Ich führe eine Liste der sicheren und ungesicherten Domänen (beide http://
und https://
) in einem Array durch und möchte ihre Statuscodes zurückgeben. Wie ist das in ASP.Net Core 1.0 möglich?Wie HttpStatus Codes in ASP.Net Core erwerben?
so weit, ich habe
foreach(var item in _context.URLs.ToList())
{
// Do something here with item.Domain to check for status
// For example, if item.Domain was https://example.com..
}
Ich versuchte es mit regelmäßiger ASP.Net Syntax mit diesem Ansatz:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(item.Domain);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Das Problem ist, GetResponse
funktioniert nicht in ASP.Net Kern
Kann mir jemand mit einer effektiven Lösung helfen, so dass die zurückgegebene Variable den Status hätte?
ex: 200
, 500
, 404
..
EDIT - Hier ist meine volle Steuerung und Lösung:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using MyApp.Models;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
namespace MyApp.Controllers.Api
{
public class URLsController : Controller
{
private MyAppDBContext _context;
public class newLink
{
public string Domain { get; set; }
public HttpStatusCode Status { get; set; }
}
public async Task<HttpStatusCode> GetStatusCodes(string url)
{
var client = new HttpClient();
var response = await client.GetAsync(url);
return response.StatusCode;
}
public URLsController(MyAppDBContext context)
{
_context = context;
}
[HttpPost("api/URLs")]
public async Task<IActionResult> Post(string url)
{
if (url != "")
{
// I pass a URL in through this API and add it to _context.URLs..
// I execute a status code check on the URLs after this if statement
}
List<newLink> list = new List<newLink>();
foreach (var item in _context.URLs.ToList())
{
newLink t = new newLink();
t.Domain = item.Domain;
t.Status = await GetStatusCodes(item.Domain);
list.Add(t);
}
return Ok(list);
}
}
}
Dies gibt einen Array zurück in diesem Format:
[{"Domain": "https://example1.com/", "Status": 200},
{ "Domain": "https://example2.com/", "Status": 200},
{ "Domain": "https://example3.com/", "Status": 200}]
Bitte Code für die Controller-Methode hinzufügen. –
Was ist, wenn die Domäne von der URL nicht auflösbar ist oder Ihre Anwendung keinen Netzwerkzugriff darauf hat? Welchen Statuscode erwarten Sie in diesem Fall? –
Was meinst du mit "funktioniert nicht"? Die Methode [gibt es] (http://stackoverflow.com/questions/41811672/how-to-acquire-httpstatus-codes-in-asp-net-core) und es gibt keine andere Möglichkeit, eine Antwort zu erhalten. Wenn dies nicht das ergibt, was Sie erwartet haben, müssen Sie das eigentliche Problem posten. Hast du eine Ausnahme bekommen? Hat [StatusCode] (https://github.com/dotnet/corefx/blob/master/src/System.Net.Requests/src/System/Net/HttpWebResponse.cs#L239) etwas unerwartetes zurückgegeben? Sind Sie sicher, dass Sie eine * korrekte * URL verwendet haben? –