Saya telah mencari selama satu jam mencoba mencari tahu mengapa ini tidak berhasil.
Saya memiliki aplikasi ASP.Net MVC 5 dengan WebAPI. Saya mencoba untuk mendapatkan Request.GetOwinContext (). Authentication, namun saya tidak dapat menemukan cara menyertakan GetOwinContext. Ini kode saya:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using TaskPro.Models;
namespace TaskPro.Controllers.api
{
public class AccountController : ApiController
{
[HttpPost]
[AllowAnonymous]
public ReturnStatus Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var ctx = Request.GetOwinContext(); // <-- Can't find this
return ReturnStatus.ReturnStatusSuccess();
}
return base.ReturnStatusErrorsFromModelState(ModelState);
}
}
}
Dari apa yang saya baca, ini seharusnya menjadi bagian dari System.Net.Http, tetapi saya telah memasukkannya dan masih belum terselesaikan. Ctrl-Space juga tidak memberi saya opsi intellisense.
Apa yang kulewatkan di sini?
c#
asp.net-web-api
owin
Scottie
sumber
sumber
System.Web.Http
namespace, tapi dariSystem.Web.Http.Owin
dll. Sudahkah Anda mereferensikan itu?System.Net.Http
namespace. Jadi Anda tidak perlu menggunakan untuk.Owin
,using System.Net.Http
yang sudah Anda miliki.Jawaban:
The
GetOwinContext
metode ekstensi dalamSystem.Web.Http.Owin
dll yang perlu di-download sebagai paket nuget (Nama paket nuget adalah Microsoft.AspNet.WebApi.Owin)Lihat msdn di sini: http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowincontext(v=vs.118).aspx
Paket nuget disini: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin
Namun, metode ini masih merupakan bagian dari
System.Net.Http
namespace, jadiusing
definisi yang Anda miliki seharusnya sudah cukup.EDIT
Oke, untuk menghilangkan beberapa kebingungan: Jika Anda menggunakan ApiController (yaitu
MyController : ApiController
), Anda akan memerlukanMicrosoft.AspNet.WebApi.Owin
paketnya.Jika Anda menggunakan pengontrol Mvc biasa (yaitu
MyController : Controller
), Anda memerlukanMicrosoft.Owin.Host.SystemWeb
paketnya.Di MVC 5, pipeline untuk Api dan MVC biasa sangat berbeda, tetapi sering kali memiliki konvensi penamaan yang sama. Jadi metode ekstensi di satu tidak berlaku untuk yang lain. Sama untuk banyak filter tindakan, dll.
sumber
Microsoft.Owin.Host.SystemWeb
, tidakMicrosoft.AspNet.WebApi.Owin
.Microsoft.AspNet.WebApi.Owin
. Jika Anda menggunakan pengontrol MVC biasa, Anda akan membutuhkannyaMicrosoft.Owin.Host.SystemWeb
. TheRequest
objek berbeda tergantung pada Pengontrol ketik Anda gunakan sehingga metode ekstensi yang berbeda.Tak satu pun dari ini berhasil untuk saya. Saya harus membandingkan paket Nuget dengan paket yang dibuat dengan Identity dan saya menemukan paket Nuget ini hilang yang ketika ditambahkan memperbaiki masalah untuk saya
Rupanya Anda membutuhkannya untuk menjalankan OWIN di IIS menggunakan pipeline permintaan ASP.NET (baca Anda kacau tanpa itu!)
sumber
Di WEB API, Anda bisa mendapatkan referensi menggunakan berikut ini:
ini berfungsi di Identity 2.0
sumber
Anda mungkin perlu menambahkan paket NuGet
Microsoft.Owin.Host.SystemWeb
untuk melakukan ini:sumber
Dalam kasus saya, saya perlu menambahkan
untuk menyelesaikan GetOwinContext dan kemudian GetUserManager di baris berikut.
sumber
Saya memiliki masalah ini dan saya mengunduh paket tambahan dari nuget untuk menyelesaikan masalah saya, (jalankan perintah berikut di Package Manager Console) Instal-Paket Microsoft.Owin.Host.SystemWeb
sumber
Ini membutuhkan waktu lama bagi saya untuk menemukan jawaban sederhana: tetapi yang saya lakukan adalah menggunakan ekstensi Get dari satu instance IOwinContext yang dibuat saat startup. Jadi hasilnya seperti ini:
sumber
The
GetOwinContext()
metode penyuluhan tidak ditemukan di thread selain thread GUI.Jadi berhati-hatilah untuk tidak memanggil fungsi ini dari dalam
await
fungsi ed mana pun .sumber
Setelah melihat proyek default ASP.NET, saya menemukan saya perlu memasukkan ini ke dalam startup aplikasi saya:
sumber
Saya kehilangan paket: Microsoft.AspNet.WebApi.Owin untuk ApiControllers. Semoga ini membantu!
sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan menggunakan metode pribadi:
private IAuthenticationManager AuthenticationManager { get { return HttpContext.Current.GetOwinContext().Authentication; } }
Ini bekerja dengan baik untuk saya.
sumber
(Harap perhatikan bahwa jawaban ini untuk ASP.NET Web API yang sesuai dengan tag yang digunakan pada pertanyaan. Lihat pertanyaan ini jika pertanyaan Anda berkaitan dengan ASP.NET MVC.)
Pertanyaan tidak menentukan bagaimana layanan ASP.NET Web API akan di- host . Dialog di posting ini menunjukkan (penekanan milik saya):
Penggunaan
Microsoft.AspNet.WebApi.Owin
paket direkomendasikan dalam jawaban yang diterima . Dalam jawaban ini saya melaporkan apa yang telah berhasil untuk saya saat menghosting layanan API Web ASP.NET di IIS .Pertama, instal paket NuGet berikut:
(Perhatikan bahwa saat saya menulis, versi terbaru yang tersedia dari paket NuGet ini adalah 3.1.0 . Juga, sejauh mungkin penting, saya menggunakan Visual Studio 2013 Update 5.)
Setelah menginstal paket NuGet ini, Anda dapat melakukan hal berikut:
Sekarang, untuk menjelaskan bagaimana pernyataan ini diselesaikan. Dalam Visual Studio, jika Anda mengklik kanan
GetOwinContext
di salah satu pernyataan dan memilih "Peek Definition", Visual Studio akan menampilkan berikut ini:Seperti yang Anda lihat, di dalam
System.Web
namespace, ada duaGetOwinContext
metode ekstensi:HttpContext
kelas, danHttpRequest
kelas.Sekali lagi, bagi mereka yang meng-hosting layanan API Web mereka di IIS, harapan saya adalah bahwa ini menghilangkan ambiguitas tentang di mana definisi untuk
GetOwinContext
dapat ditemukan sehubungan dengan tanggal akhir tahun 2017 ini.sumber
Saya harus menambahkan paket
Microsoft.AspNet.Identity.Owin
sumber