c# – 服务有时仅抛出No’Access-Control-Allow-Origin’标头错
发布时间:2020-12-15 22:10:23 所属栏目:百科 来源:网络整理
导读:我有一个服务有几种方法.我设置我的Global.asax文件来处理CORS,并且所有东西都工作得很好,包括CORS ……直到我在接口文件中添加了以下内容: [OperationContract][WebInvoke(UriTemplate = "/Transform",Method = "POST",ResponseFormat = WebMessageFormat.
我有一个服务有几种方法.我设置我的Global.asax文件来处理CORS,并且所有东西都工作得很好,包括CORS ……直到我在接口文件中添加了以下内容:
[OperationContract] [WebInvoke(UriTemplate = "/Transform",Method = "POST",ResponseFormat = WebMessageFormat.Json)] bool XXXTransform(string user,string x); 以及服务类的以下内容…… bool XXXTransform(string user,string x) { return true; } 现在,这是非常有趣的事情.当我调用GetRecipes方法时发生错误.更有趣的是,如果我只为接口和服务类的XXXTransform指定了一个参数,它就不会抛出错误 – 如bool XXXTransform(string user) 有没有人见过这样的事情呢?为什么使用一个参数可以工作,但是在调用完全不同的方法时,两个参数会导致原始错误? IChomp.cs: namespace NomNomNotebookService { // May need to mod service behavior for upload... [ServiceContract] public interface IChomp { [OperationContract] [WebInvoke(UriTemplate = "/{userId}/Recipes",Method = "GET",ResponseFormat = WebMessageFormat.Json)] List<Recipe> GetRecipes(string userId); [OperationContract] [WebInvoke(UriTemplate = "/{userId}/Recipes",BodyStyle = WebMessageBodyStyle.WrappedRequest,RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)] Recipe AddRecipe(string userId,Recipe recipe); [OperationContract] [WebInvoke(UriTemplate = "/{userId}/Recipes/{recipeId}",ResponseFormat = WebMessageFormat.Json)] Recipe UpdateRecipe(string userId,string recipeId,Method = "DELETE",ResponseFormat = WebMessageFormat.Json)] bool DeleteRecipe(string userId,string recipeId); [OperationContract] [WebInvoke(UriTemplate = "/{userId}/Recipes/{recipeId}",ResponseFormat = WebMessageFormat.Json)] Recipe GetRecipe(string userId,string recipeId); [OperationContract] [WebInvoke(UriTemplate = "/Categories",ResponseFormat = WebMessageFormat.Json)] List<Category> GetCategories(); [OperationContract] [WebInvoke(UriTemplate = "/Upload",ResponseFormat = WebMessageFormat.Json)] bool XXXUpload(); [OperationContract] [WebInvoke(UriTemplate = "/Transform",ResponseFormat = WebMessageFormat.Json)] bool XXXTransform(string user,string x); // WILL work if I have bool XXXTransform(string user) } } Chomp.cs namespace NomNomNotebookService { public class Chomp : IChomp { private DBConnector _dbCon = new DBConnector(); public List<Recipe> GetRecipes(string userId) { _dbCon.Parameters.Add(new CustSqlParam("@userId",Int16.Parse(userId))); DataTable dt = _dbCon.RunProc("J_NNN_GetRecipesForUser"); List<Recipe> recipes = new List<Recipe>(); foreach (DataRow row in dt.Rows) { recipes.Add(new Recipe((int)row["Uid"],(string)row["Name"],(string)row["Description"],(string)row["Category"])); } _dbCon.Kill(); return recipes; } public Recipe GetRecipe(string userId,string recipeId) { _dbCon.Parameters.Add(new CustSqlParam("@uid",Int16.Parse(recipeId))); DataTable dt = _dbCon.RunProc("J_NNN_GetRecipe"); Recipe recipe = new Recipe(dt.Rows[0]); _dbCon.Kill(); return recipe; } // USER ID IS HERE FOR VALIDATION ONCE SESSIONS ARE ROLLING public Recipe AddRecipe(string userId,Recipe recipe) { _dbCon.Parameters.Add(new CustSqlParam("@userId",Int16.Parse(userId))); _dbCon.Parameters.Add(new CustSqlParam("@name",recipe.Name)); _dbCon.Parameters.Add(new CustSqlParam("@description",recipe.Description)); _dbCon.Parameters.Add(new CustSqlParam("@categoryId",recipe.Category.Uid)); _dbCon.Parameters.Add(new CustSqlParam("@prepTime",recipe.PrepTime)); _dbCon.Parameters.Add(new CustSqlParam("@cookTime",recipe.CookTime)); _dbCon.Parameters.Add(new CustSqlParam("@readyTime",recipe.ReadyTime)); DataTable dt = _dbCon.RunProc("J_NNN_AddRecipe"); _dbCon.Kill(); return new Recipe(dt.Rows[0]); } public Recipe UpdateRecipe(string userId,Recipe recipe) { _dbCon.Parameters.Add(new CustSqlParam("@uid",Int16.Parse(recipeId))); _dbCon.Parameters.Add(new CustSqlParam("@name",recipe.ReadyTime)); DataTable dt = _dbCon.RunProc("J_NNN_UpdateRecipe"); _dbCon.Kill(); return new Recipe(dt.Rows[0]); } public bool DeleteRecipe(string userId,string recipeId) { try { _dbCon.Parameters.Add(new CustSqlParam("@uid",Int16.Parse(recipeId))); DataTable dt = _dbCon.RunProc("J_NNN_DeleteRecipe"); _dbCon.Kill(); } catch (Exception e) { Console.WriteLine(e.ToString()); return false; } return true; } public List<Category> GetCategories() { DataTable dt = _dbCon.RunProc("J_NNN_GetCategories"); _dbCon.Kill(); List<Category> categories = new List<Category>(); foreach (DataRow row in dt.Rows) { categories.Add(new Category((int)row["Uid"],(string)row["Name"])); } return categories; } // Upload shit.... public bool XXXUpload() { return false; } public bool XXXTransform(string user,string x) // WILL work if I have bool XXXTransform(string user) { return true; } } } Global.asax中 namespace NomNomNotebookService { public class Global : System.Web.HttpApplication { protected void Session_Start(object sender,EventArgs e) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin","*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods","GET,POST,PUT,DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers","Content-Type,Accept"); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age","1728000"); HttpContext.Current.Response.End(); } } } } 解决方法
我过去也遇到过类似的错误.您是否在配置中设置了请求标头?
'Access-Control-Allow-Methods','GET,DELETE,OPTIONS' 'Access-Control-Allow-Headers','Content-Type,Authorization,Content-Length,X-Requested-With' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |