Estoy trabajando en el proyecto web api de asp.net. Quiero permitir solo el acceso a mi dominio, pero funciona bien cuando llamo a mi webapi desde JavaScript, pero el problema es que cuando llamo a la web api desde el código c #, permite que cualquier dominio acceda. ¿Cómo puedo restringir esto? quiero dar acceso solo para mi dominio
Estoy trabajando en el proyecto web api de asp.net. Quiero permitir solo el acceso a mi dominio, pero funciona bien cuando llamo a mi webapi desde JavaScript, pero el problema es que cuando llamo a la web api desde el código C#, permite que todos accedan a Domine. ¿Cómo puedo restringir esto? ..? quiero dar acceso solo para mi dominio
Puede usar Microsoft.AspNet.WebApi.Cors, un paquete Nuget de Microsoft. Siga estos pasos:
paquete de instalación para su proyecto de API.
agregue un código de línea a su archivo App_Start/WebApiConfig.cs para habilitar la función: config.EnableCors();
using System.Web.Http; namespace WebService { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // New code config.EnableCors(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } }use el atributo en su controlador o acción como esta:
using System.Net.Http; using System.Web.Http; using System.Web.Http.Cors; namespace WebService.Controllers { [EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")] public class TestController : ApiController { // Controller methods not shown... } }Puedes obtener más información aquí
1=> var cors = new EnableCorsAttribute("http://mydomain", "*", "*"); config.EnableCors(cors); Escribí este código en el archivo de configuración web como nivel global, pero funciona bien cuando llamo a mi API web desde el lado del cliente, solo permite un dominio específico
2=> Este es mi código del lado del cliente
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> $ $.ajax({ url: "http://localhost:49676/Account/ValidLogin", method: "get", data: Employee, dataType: "json", //contentType: "application/json", success: function (data) { GetAllEmployee(data); alert("success"); console.log(data); }, error: function (err) { alert("error"); }Aquí está mi código del lado del servidor
void protegido btnDelete_Click(objeto remitente, EventArgs e) {
string strUrl = string.Format("http://mydomain/account/validlogin?username=admin&password=admin"); HttpWebRequest requestObjectGet = (HttpWebRequest)HttpWebRequest.Create(strUrl); requestObjectGet.Method = "GET"; HttpWebResponse responseObjectGet = null; responseObjectGet = (HttpWebResponse)requestObjectGet.GetResponse(); string strresulttest = null; using (Stream stream = responseObjectGet.GetResponseStream()) { StreamReader sr = new StreamReader(stream); strresulttest = sr.ReadToEnd(); JavaScriptSerializer js = new JavaScriptSerializer(); string StrToken = js.Deserialize<string>(strresulttest); Session["ApiToken"] = StrToken;}