Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Ostrzeżenie
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Autor: Rick Anderson
Otwórz kontroler Movie i sprawdź metodę Details :
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
Aparat tworzenia szkieletów MVC, który utworzył tę metodę akcji, dodaje komentarz pokazujący żądanie HTTP, które wywołuje metodę. W takim przypadku jest to żądanie GET z trzema segmentami adresów URL, Movies kontrolerem, Details metodą i wartością id . Pamiętaj, że te segmenty są zdefiniowane w pliku Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Program EF ułatwia wyszukiwanie danych przy użyciu FirstOrDefaultAsync metody . Ważną funkcją zabezpieczeń wbudowaną w metodę jest to, że kod sprawdza, czy metoda wyszukiwania znalazła film, zanim podejmie próbę wykonania niczego z nim. Na przykład haker może wprowadzić błędy w witrynie, zmieniając adres URL utworzony przez łącza z http://localhost:{PORT}/Movies/Details/1 na coś http://localhost:{PORT}/Movies/Details/12345 podobnego (lub inną wartość, która nie reprezentuje rzeczywistego filmu). Jeśli nie sprawdzisz filmu o wartości null, aplikacja zgłosi wyjątek.
Zbadaj Delete metody i DeleteConfirmed .
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var movie = await _context.Movie.FindAsync(id);
if (movie != null)
{
_context.Movie.Remove(movie);
}
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Należy pamiętać, że HTTP GET Delete metoda nie usuwa określonego filmu, zwraca widok filmu, w którym można przesłać (HttpPost) usunięcie. Wykonanie operacji usuwania w odpowiedzi na żądanie GET (lub w tym przypadku wykonanie operacji edycji, operacji tworzenia lub dowolnej innej operacji, która zmienia dane) otwiera dziurę zabezpieczeń.
Metoda [HttpPost] , która usuwa dane, jest nazwana DeleteConfirmed w celu nadania metodzie HTTP POST unikatowego podpisu lub nazwy. Poniżej przedstawiono dwa podpisy metody:
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Środowisko uruchomieniowe języka wspólnego (CLR) wymaga przeciążonych metod, aby mieć unikatowy podpis parametru (taką samą nazwę metody, ale inną listę parametrów). Jednak w tym miejscu potrzebne są dwie Delete metody — jedna dla metody GET i jedna dla funkcji POST — które mają ten sam podpis parametru. (Oba elementy muszą zaakceptować pojedynczą liczbę całkowitą jako parametr).
Istnieją dwa podejścia do tego problemu, jednym z nich jest nadanie metodom różnych nazw. Tak właśnie zrobił mechanizm tworzenia szkieletów w poprzednim przykładzie. Jednak w ten sposób wprowadzono niewielki problem: ASP.NET mapuje segmenty adresu URL na metody akcji według nazwy, a jeśli zmienisz nazwę metody, routing zwykle nie będzie mógł znaleźć tej metody. Rozwiązaniem jest to, co widać w przykładzie, czyli dodanie atrybutu ActionName("Delete")DeleteConfirmed do metody . Ten atrybut wykonuje mapowanie dla systemu routingu, tak aby adres URL zawierający /Delete/ dla żądania POST znaleźć metodę DeleteConfirmed .
Innym typowym rozwiązaniem w przypadku metod, które mają identyczne nazwy i podpisy, jest sztuczna zmiana podpisu metody POST w celu uwzględnienia dodatkowego (nieużywanego) parametru. To właśnie zrobiliśmy w poprzednim wpisie po dodaniu parametru notUsed . Możesz to zrobić w tym miejscu dla [HttpPost] Delete metody :
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikowanie na platformie Azure
Aby uzyskać informacje na temat wdrażania na platformie Azure, zobacz Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.
Wzorce aplikacji internetowej dla przedsiębiorstw
Aby uzyskać wskazówki dotyczące tworzenia niezawodnej, bezpiecznej, wydajnej, testowalnej i skalowalnej aplikacji ASP.NET Core, zobacz wzorce aplikacji internetowych Enterprise. Dostępna jest kompletna przykładowa aplikacja internetowa jakości produkcyjnej, która implementuje wzorce.
Otwórz kontroler Movie i sprawdź metodę Details :
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
Aparat tworzenia szkieletów MVC, który utworzył tę metodę akcji, dodaje komentarz pokazujący żądanie HTTP, które wywołuje metodę. W takim przypadku jest to żądanie GET z trzema segmentami adresów URL, Movies kontrolerem, Details metodą i wartością id . Pamiętaj, że te segmenty są zdefiniowane w pliku Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Program EF ułatwia wyszukiwanie danych przy użyciu FirstOrDefaultAsync metody . Ważną funkcją zabezpieczeń wbudowaną w metodę jest to, że kod sprawdza, czy metoda wyszukiwania znalazła film, zanim podejmie próbę wykonania niczego z nim. Na przykład haker może wprowadzić błędy w witrynie, zmieniając adres URL utworzony przez łącza z http://localhost:{PORT}/Movies/Details/1 na coś http://localhost:{PORT}/Movies/Details/12345 podobnego (lub inną wartość, która nie reprezentuje rzeczywistego filmu). Jeśli nie sprawdzisz filmu o wartości null, aplikacja zgłosi wyjątek.
Zbadaj Delete metody i DeleteConfirmed .
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var movie = await _context.Movie.FindAsync(id);
if (movie != null)
{
_context.Movie.Remove(movie);
}
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Należy pamiętać, że HTTP GET Delete metoda nie usuwa określonego filmu, zwraca widok filmu, w którym można przesłać (HttpPost) usunięcie. Wykonanie operacji usuwania w odpowiedzi na żądanie GET (lub w tym przypadku wykonanie operacji edycji, operacji tworzenia lub dowolnej innej operacji, która zmienia dane) otwiera dziurę zabezpieczeń.
Metoda [HttpPost] , która usuwa dane, jest nazwana DeleteConfirmed w celu nadania metodzie HTTP POST unikatowego podpisu lub nazwy. Poniżej przedstawiono dwa podpisy metody:
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Środowisko uruchomieniowe języka wspólnego (CLR) wymaga przeciążonych metod, aby mieć unikatowy podpis parametru (taką samą nazwę metody, ale inną listę parametrów). Jednak w tym miejscu potrzebne są dwie Delete metody — jedna dla metody GET i jedna dla funkcji POST — które mają ten sam podpis parametru. (Oba elementy muszą zaakceptować pojedynczą liczbę całkowitą jako parametr).
Istnieją dwa podejścia do tego problemu, jednym z nich jest nadanie metodom różnych nazw. Tak właśnie zrobił mechanizm tworzenia szkieletów w poprzednim przykładzie. Jednak w ten sposób wprowadzono niewielki problem: ASP.NET mapuje segmenty adresu URL na metody akcji według nazwy, a jeśli zmienisz nazwę metody, routing zwykle nie będzie mógł znaleźć tej metody. Rozwiązaniem jest to, co widać w przykładzie, czyli dodanie atrybutu ActionName("Delete")DeleteConfirmed do metody . Ten atrybut wykonuje mapowanie dla systemu routingu, tak aby adres URL zawierający /Delete/ dla żądania POST znaleźć metodę DeleteConfirmed .
Innym typowym rozwiązaniem w przypadku metod, które mają identyczne nazwy i podpisy, jest sztuczna zmiana podpisu metody POST w celu uwzględnienia dodatkowego (nieużywanego) parametru. To właśnie zrobiliśmy w poprzednim wpisie po dodaniu parametru notUsed . Możesz to zrobić w tym miejscu dla [HttpPost] Delete metody :
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikowanie na platformie Azure
Aby uzyskać informacje na temat wdrażania na platformie Azure, zobacz Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.
Wzorce aplikacji internetowej dla przedsiębiorstw
Aby uzyskać wskazówki dotyczące tworzenia niezawodnej, bezpiecznej, wydajnej, testowalnej i skalowalnej aplikacji ASP.NET Core, zobacz wzorce aplikacji internetowych Enterprise. Dostępna jest kompletna przykładowa aplikacja internetowa jakości produkcyjnej, która implementuje wzorce.
Otwórz kontroler Movie i sprawdź metodę Details :
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
Aparat tworzenia szkieletów MVC, który utworzył tę metodę akcji, dodaje komentarz pokazujący żądanie HTTP, które wywołuje metodę. W takim przypadku jest to żądanie GET z trzema segmentami adresów URL, Movies kontrolerem, Details metodą i wartością id . Pamiętaj, że te segmenty są zdefiniowane w pliku Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Program EF ułatwia wyszukiwanie danych przy użyciu FirstOrDefaultAsync metody . Ważną funkcją zabezpieczeń wbudowaną w metodę jest to, że kod sprawdza, czy metoda wyszukiwania znalazła film, zanim podejmie próbę wykonania niczego z nim. Na przykład haker może wprowadzić błędy w witrynie, zmieniając adres URL utworzony przez łącza z http://localhost:{PORT}/Movies/Details/1 na coś http://localhost:{PORT}/Movies/Details/12345 podobnego (lub inną wartość, która nie reprezentuje rzeczywistego filmu). Jeśli nie sprawdzisz filmu o wartości null, aplikacja zgłosi wyjątek.
Zbadaj Delete metody i DeleteConfirmed .
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var movie = await _context.Movie.FindAsync(id);
if (movie != null)
{
_context.Movie.Remove(movie);
}
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Należy pamiętać, że HTTP GET Delete metoda nie usuwa określonego filmu, zwraca widok filmu, w którym można przesłać (HttpPost) usunięcie. Wykonanie operacji usuwania w odpowiedzi na żądanie GET (lub w tym przypadku wykonanie operacji edycji, operacji tworzenia lub dowolnej innej operacji, która zmienia dane) otwiera dziurę zabezpieczeń.
Metoda [HttpPost] , która usuwa dane, jest nazwana DeleteConfirmed w celu nadania metodzie HTTP POST unikatowego podpisu lub nazwy. Poniżej przedstawiono dwa podpisy metody:
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Środowisko uruchomieniowe języka wspólnego (CLR) wymaga przeciążonych metod, aby mieć unikatowy podpis parametru (taką samą nazwę metody, ale inną listę parametrów). Jednak w tym miejscu potrzebne są dwie Delete metody — jedna dla metody GET i jedna dla funkcji POST — które mają ten sam podpis parametru. (Oba elementy muszą zaakceptować pojedynczą liczbę całkowitą jako parametr).
Istnieją dwa podejścia do tego problemu, jednym z nich jest nadanie metodom różnych nazw. Tak właśnie zrobił mechanizm tworzenia szkieletów w poprzednim przykładzie. Jednak w ten sposób wprowadzono niewielki problem: ASP.NET mapuje segmenty adresu URL na metody akcji według nazwy, a jeśli zmienisz nazwę metody, routing zwykle nie będzie mógł znaleźć tej metody. Rozwiązaniem jest to, co widać w przykładzie, czyli dodanie atrybutu ActionName("Delete")DeleteConfirmed do metody . Ten atrybut wykonuje mapowanie dla systemu routingu, tak aby adres URL zawierający /Delete/ dla żądania POST znaleźć metodę DeleteConfirmed .
Innym typowym rozwiązaniem w przypadku metod, które mają identyczne nazwy i podpisy, jest sztuczna zmiana podpisu metody POST w celu uwzględnienia dodatkowego (nieużywanego) parametru. To właśnie zrobiliśmy w poprzednim wpisie po dodaniu parametru notUsed . Możesz to zrobić w tym miejscu dla [HttpPost] Delete metody :
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikowanie na platformie Azure
Aby uzyskać informacje na temat wdrażania na platformie Azure, zobacz Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.
Otwórz kontroler Movie i sprawdź metodę Details :
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
Aparat tworzenia szkieletów MVC, który utworzył tę metodę akcji, dodaje komentarz pokazujący żądanie HTTP, które wywołuje metodę. W takim przypadku jest to żądanie GET z trzema segmentami adresów URL, Movies kontrolerem, Details metodą i wartością id . Pamiętaj, że te segmenty są zdefiniowane w pliku Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Program EF ułatwia wyszukiwanie danych przy użyciu FirstOrDefaultAsync metody . Ważną funkcją zabezpieczeń wbudowaną w metodę jest to, że kod sprawdza, czy metoda wyszukiwania znalazła film, zanim podejmie próbę wykonania niczego z nim. Na przykład haker może wprowadzić błędy w witrynie, zmieniając adres URL utworzony przez łącza z http://localhost:{PORT}/Movies/Details/1 na coś http://localhost:{PORT}/Movies/Details/12345 podobnego (lub inną wartość, która nie reprezentuje rzeczywistego filmu). Jeśli nie sprawdzisz filmu o wartości null, aplikacja zgłosi wyjątek.
Zbadaj Delete metody i DeleteConfirmed .
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var movie = await _context.Movie.FindAsync(id);
_context.Movie.Remove(movie);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Należy pamiętać, że HTTP GET Delete metoda nie usuwa określonego filmu, zwraca widok filmu, w którym można przesłać (HttpPost) usunięcie. Wykonanie operacji usuwania w odpowiedzi na żądanie GET (lub w tym przypadku wykonanie operacji edycji, operacji tworzenia lub dowolnej innej operacji, która zmienia dane) otwiera dziurę zabezpieczeń.
Metoda [HttpPost] , która usuwa dane, jest nazwana DeleteConfirmed w celu nadania metodzie HTTP POST unikatowego podpisu lub nazwy. Poniżej przedstawiono dwa podpisy metody:
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Środowisko uruchomieniowe języka wspólnego (CLR) wymaga przeciążonych metod, aby mieć unikatowy podpis parametru (taką samą nazwę metody, ale inną listę parametrów). Jednak w tym miejscu potrzebne są dwie Delete metody — jedna dla metody GET i jedna dla funkcji POST — które mają ten sam podpis parametru. (Oba elementy muszą zaakceptować pojedynczą liczbę całkowitą jako parametr).
Istnieją dwa podejścia do tego problemu, jednym z nich jest nadanie metodom różnych nazw. Tak właśnie zrobił mechanizm tworzenia szkieletów w poprzednim przykładzie. Jednak w ten sposób wprowadzono niewielki problem: ASP.NET mapuje segmenty adresu URL na metody akcji według nazwy, a jeśli zmienisz nazwę metody, routing zwykle nie będzie mógł znaleźć tej metody. Rozwiązaniem jest to, co widać w przykładzie, czyli dodanie atrybutu ActionName("Delete")DeleteConfirmed do metody . Ten atrybut wykonuje mapowanie dla systemu routingu, tak aby adres URL zawierający /Delete/ dla żądania POST znaleźć metodę DeleteConfirmed .
Innym typowym rozwiązaniem w przypadku metod, które mają identyczne nazwy i podpisy, jest sztuczna zmiana podpisu metody POST w celu uwzględnienia dodatkowego (nieużywanego) parametru. To właśnie zrobiliśmy w poprzednim wpisie po dodaniu parametru notUsed . Możesz to zrobić w tym miejscu dla [HttpPost] Delete metody :
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikowanie na platformie Azure
Aby uzyskać informacje na temat wdrażania na platformie Azure, zobacz Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.
Otwórz kontroler Movie i sprawdź metodę Details :
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
Aparat tworzenia szkieletów MVC, który utworzył tę metodę akcji, dodaje komentarz pokazujący żądanie HTTP, które wywołuje metodę. W takim przypadku jest to żądanie GET z trzema segmentami adresów URL, Movies kontrolerem, Details metodą i wartością id . Pamiętaj, że te segmenty są zdefiniowane w pliku Startup.cs.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Program EF ułatwia wyszukiwanie danych przy użyciu FirstOrDefaultAsync metody . Ważną funkcją zabezpieczeń wbudowaną w metodę jest to, że kod sprawdza, czy metoda wyszukiwania znalazła film, zanim podejmie próbę wykonania niczego z nim. Na przykład haker może wprowadzić błędy w witrynie, zmieniając adres URL utworzony przez łącza z http://localhost:{PORT}/Movies/Details/1 na coś http://localhost:{PORT}/Movies/Details/12345 podobnego (lub inną wartość, która nie reprezentuje rzeczywistego filmu). Jeśli nie sprawdzisz filmu o wartości null, aplikacja zgłosi wyjątek.
Zbadaj Delete metody i DeleteConfirmed .
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var movie = await _context.Movie
.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return View(movie);
}
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var movie = await _context.Movie.FindAsync(id);
_context.Movie.Remove(movie);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Należy pamiętać, że HTTP GET Delete metoda nie usuwa określonego filmu, zwraca widok filmu, w którym można przesłać (HttpPost) usunięcie. Wykonanie operacji usuwania w odpowiedzi na żądanie GET (lub w tym przypadku wykonanie operacji edycji, operacji tworzenia lub dowolnej innej operacji, która zmienia dane) otwiera dziurę zabezpieczeń.
Metoda [HttpPost] , która usuwa dane, jest nazwana DeleteConfirmed w celu nadania metodzie HTTP POST unikatowego podpisu lub nazwy. Poniżej przedstawiono dwa podpisy metody:
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Środowisko uruchomieniowe języka wspólnego (CLR) wymaga przeciążonych metod, aby mieć unikatowy podpis parametru (taką samą nazwę metody, ale inną listę parametrów). Jednak w tym miejscu potrzebne są dwie Delete metody — jedna dla metody GET i jedna dla funkcji POST — które mają ten sam podpis parametru. (Oba elementy muszą zaakceptować pojedynczą liczbę całkowitą jako parametr).
Istnieją dwa podejścia do tego problemu, jednym z nich jest nadanie metodom różnych nazw. Tak właśnie zrobił mechanizm tworzenia szkieletów w poprzednim przykładzie. Jednak w ten sposób wprowadzono niewielki problem: ASP.NET mapuje segmenty adresu URL na metody akcji według nazwy, a jeśli zmienisz nazwę metody, routing zwykle nie będzie mógł znaleźć tej metody. Rozwiązaniem jest to, co widać w przykładzie, czyli dodanie atrybutu ActionName("Delete")DeleteConfirmed do metody . Ten atrybut wykonuje mapowanie dla systemu routingu, tak aby adres URL zawierający /Delete/ dla żądania POST znaleźć metodę DeleteConfirmed .
Innym typowym rozwiązaniem w przypadku metod, które mają identyczne nazwy i podpisy, jest sztuczna zmiana podpisu metody POST w celu uwzględnienia dodatkowego (nieużywanego) parametru. To właśnie zrobiliśmy w poprzednim wpisie po dodaniu parametru notUsed . Możesz to zrobić w tym miejscu dla [HttpPost] Delete metody :
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikowanie na platformie Azure
Aby uzyskać informacje na temat wdrażania na platformie Azure, zobacz Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.