My Ajax call is not executing the web method and is returning status code "302 Found". Futher more... inspecting the trace shows that the method was actually sent as "OPTIONS"??
This was all working when the web method was in an aspx file. I had to move it to a asmx as I turned the code into a UserControl.
Ajax Call:
$.ajax({
type: "POST", //HTTP method
url: '<%= ResolveUrl("http://tempuri.org/PLService.asmx/getLocations")%>', //page/method name
data: "{}", //json to represent argument
contentType: "application/json; charset=utf-8",
dataType: "json",
success: processData //handle the callback to handle response
})
Web Method in PLService
[WebMethod]
public static string getLocations()
{
System.Diagnostics.Debug.WriteLine("Getting Locations.");
return "{\"region\":\"auckland\", \"city\":\"auckland\"}";
}
Request:
Host: tempuri.org
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://localhost:1968
Access-Control-Request-Method: POST
Access-Control-Request-Headers: cache-control,pragma
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Response Header:
Host: tempuri.org
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://localhost:1968
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
3 Things:
Have a valid target:
[WebService(Namespace = "")]
When a Web method is declared in an asmx it should not be declared static
You need to configure the web service with the [ScriptService] attribute to handle calls from client side scripts.
[System.Web.Script.Services.ScriptService]
Related
Been through dozens of links which all say the same solution.
Create an object for the parameter in the api call. And pass that exact same object using json.
So API call is thus (which is hit):
[System.Web.Http.HttpPost]
public Microsoft.AspNetCore.Mvc.JsonResult SearchItems([FromBody]SearchParams searchParams)
Input object is defined thus:
public class SearchParams
{
public string searchWord { get; set; }
public int anid { get; set; }
}
Call is made thus:
let item = {
searchWord: searchKeyword.value.trim(),
anid: 1
};
const uri = "../../WebApi/SearchItems";
fetch(uri, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(item),
//credentials: 'include',
mode: 'cors',
})
Look at the network traffic, headers passed are thus:
:authority: localhost:44386
:method: POST
:path: /WebApi/SearchItems
:scheme: https
accept: application/json
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
content-length: 32
content-type: application/json
cookie: .AspNetCore.Session=CfDJ8LGmdU3gpbZIvSkveH0x8cMT8VibUQlc07yQ8SJOo6DJkNqykRsAz2V6NVuQ5zQhzBNiHjZ2iRJc%2Fno44sQdQJhsVPnktzx8EWu%2Bptg9ONjmErDP3TZ1csme%2FAJ3H5hSgvooxH0snE00och2ov4ZldFCosHYGH6X70ESjL8PbcJg; .AspNetCore.Antiforgery.Q2hy0CiNRlg=CfDJ8LGmdU3gpbZIvSkveH0x8cOOBFRZOyah2508xPXIUjTbV_weFLdM06pME-M-kc2l48FOmSym_5JS9GUHJeciQEKJI9SHBu1D-5wLcVF4de3rYsjKRsI67qGrCado7eBFDBAbeYFOLWEMbXXCQr_0vlA
origin: https://localhost:44386
referer: https://localhost:44386/lb_users/Details/11
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Payload is thus:
{"searchWord":"qwerty","anid":1}
Both my VS debugger AND Postman brings back null/0 values.
Relatively new to .net core.
So what fundamental thing am I missing here as the dozens of SO questions I've looked at all seem identical to what I've added to my solution?
Thanks in advance.
EDIT:
this works.
const uri = "../../WebApi/SearchItems";
fetch(uri, {
method: 'POST',
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: "searchWord=" + searchKeyword.value.trim() + "&anid=1",
//credentials: 'include',
mode: 'cors',
})
So it would appear the JSON is the issue.
Have JSON objects been dropped from being passed to api calls?
I test asp .net webapi2 and asp .net core,both can work.
Here is a demo of asp .net webapi2:
ApiController:
public class ValuesController : ApiController
{
[System.Web.Http.HttpPost]
public string GetVal(SearchParams searchParams)
{
return "success";
}
}
public class SearchParams
{
public string searchWord { get; set; }
public int anid { get; set; }
}
ajax:
<input id="searchWord"/>
<button onclick="sendData()">ssss</button>
<script>
function sendData() {
let item = {
searchWord: $("#searchWord").val().trim(),
anid: 1
};
const uri = "../api/Values";
fetch(uri, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(item),
//credentials: 'include',
mode: 'cors',
})
}
</script>
headers:
:authority: localhost:44383
:method: POST
:path: /api/Values
:scheme: https
accept: application/json
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
content-length: 33
content-type: application/json
cookie: .AspNetCore.Culture=c%3Den-US%7Cuic%3Den-US; .AspNetCore.Antiforgery.I5tvYLHG_pU=CfDJ8AkZmG9N6OhEnYVb3Xy31rQgFnXqHPkWTaV4nUodZGM9SfyhvD5jztl-kzo768oHkGPUYV-bOoSNBP5OuTHO_yd08w-IxrsO39HceHJgOIqC5ePYLIxXd0w9cBzYeWEu5amihQhOqiLySw376bp9YdM
origin: https://localhost:44383
referer: https://localhost:44383/Home/Index1
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
paylod:
{searchWord: "hghgfgf", anid: 1}
result:
You can also try to create a new project,and test it.
Hi I'm trying to read the Request body sent by React app with axios to Asp.net core app (IdentityServer 4) to get the token. The following code is from react app.
const headers = {
'Content-Type': 'application/json',
}
const data = {
'grant_type': 'password',
'client_id': '*********-****-****-****-************',
'client_secret': 'ClientSecret',
'username': 'user',
'password': 'password',
'scope': 'email',
'response_type': 'id_token'
}
axios.post('http://localhost:5000/connect/token', data, {
headers: headers
})
.then((response) => {
console.log(response)
})
.catch((error) => {
console.log(error)
})
IdentityServer code is as follows ( I have registered IHttpContextAccessor in startup.cs class )
namespace IdentityServer
{
public class CustomCorsPolicy : ICorsPolicyService
{
private readonly IHttpContextAccessor _httpContext;
public CustomCorsPolicy(IHttpContextAccessor httpContext)
{
_httpContext = httpContext; ----------> Trying to access request body here I want to get the clientId sent by react app in request body.
}
public Task<bool> IsOriginAllowedAsync(string origin)
{
return Task.FromResult(true);
}
}
}
When I try to debug to see the request body I'm getting the following data
Am I doing anything wrong here? If so can anyone help me to know How can I get the request body.
Your custom CustomCorsPolicy will only be called on CORS-related requests and that means only when you do AJAX-requests from your browser, for example when you call the UserInfo endpoint.
So, that means that your CustomCorsPolicy is never called as part of the normal authentication request process, only during AJAX-requests. during the first CORS preflight request to the /connect/userinfo endpoint (with the OPTIONS http request method/verb) there is NO token or clientID provided at all.
During the second request, you get the access token from the Authorization header. You could with some hard work get the clientID from the access token. The token is in the request headers, not request body (that is empty during both requests).
The first request looks like:
OPTIONS https://localhost:6001/connect/userinfo HTTP/1.1
Host: localhost:6001
Connection: keep-alive
Accept: */*
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Origin: https://localhost:5001
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-Fetch-Dest: empty
Referer: https://localhost:5001/ImplicitFlow/LoggedInUsingFragment
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
the second request to the-user info endpoint looks like this:
GET https://localhost:6001/connect/userinfo HTTP/1.1
Host: localhost:6001
Connection: keep-alive
Accept: */*
DNT: 1
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjY1NzVBNTk1MkYwQUI3MTA3NzM2RDQ4RTY4REQwOTI2IiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE1OTUzNTUxNDYsImV4cCI6MTU5NTM1ODc0NiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NjAwMSIsImF1ZCI6WyJwYXltZW50IiwiaW52b2ljZSIsIm9yZGVyIiwiaHR0cHM6Ly9sb2NhbGhvc3Q6NjAwMS9yZXNvdXJjZXMiXSwiY2xpZW50X2lkIjoiaW1wbGljaXRmbG93Y2xpZW50Iiwic3ViIjoiVXNlcklEMTIzNDU2IiwiYXV0aF90aW1lIjoxNTk1MzU0ODk0LCJpZHAiOiJsb2NhbCIsInNlbmlvcml0eSI6IlNlbmlvciIsImNvbnRyYWN0b3IiOiJubyIsImVtcGxveWVlIjoieWVzIiwianRpIjoiMUY4NkE1NERBNzBBN0E1M0Q0RTRFOURCMUZFNTg5RDciLCJzaWQiOiIxRUMxNzAwREUxODZGOEFGRTc0MEQ3QTBGMjM1MDI1RCIsImlhdCI6MTU5NTM1NTE0Niwic2NvcGUiOlsib3BlbmlkIiwiZW1haWwiLCJwcm9maWxlIiwic2hvcC5hZG1pbiJdLCJhbXIiOlsicHdkIl19.Ey9e1OyVgm8ctrUmv9BlKsZburIHmKwEZc53EWu7H0dXg_DbgzPyIttq35wkGGrL6mbL9k4v9MPtwgvXP2iStR-9IMSEjXml9Wb0oFcAmlhWYSMW3bQ-64qUrgzwiDW6WFTcBAFR5q_cw-HEjYbLQzxhV5_6QuaJTfF15OpqxEk9074A-FaM7I-WvgTSMesqZCqupuYBmXPOxnTaII8ZMy1EnnOaDfT1dUUBIU1gB4H4waU_iUoX6u_nJrgXVlm9kYn0CkcV9qiVMlRCAg_t1q-nBjjRMZCrfa5hKgAdz2rzmjUpKGTCIU30RkryVDf845xMbcEiC6KZhPai_pPSmg
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
Origin: https://localhost:5001
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://localhost:5001/ImplicitFlow/LoggedInUsingFragment
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
But back to the initial question, I think you need to rethink what you try to achieve, beause the CORS service is only called on CORS-requests, after the client already have received their access-token. I think you can solve it much easier by creating different client definitions and ApiScopes for the different client and rights that you want to control.
Im trying to send a JSON using the angular 8 HttpClient to an ASP.net core backend using the following code:
import { HttpClient, HttpHeaders} from '#angular/common/http';
import { User } from '#/_models';
login(username, password) {
return this.http.post<any>(`https://${config.apiUrl}/api/User/LoginUser`,
JSON.stringify({
"username": username,
"password": password
})
).pipe(map(user => {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
console.log(user);
this.currentUserSubject.next(user);
return user;
}));
}
}
However, when trying to send the JSON when logging in to the login page which is hosted using the command npm start, so
localhost:8080/login
is sending the request.
The request headers are:
POST /api/User/LoginUser HTTP/1.1
Host: (Checked_and_correct_API_URL)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:8080/login
Content-Type: text/plain
Content-Length: 49
Origin: http://localhost:8080
DNT: 1
Connection: keep-alive
the response headers are:
HTTP/2.0 415 Unsupported Media Type
content-type: application/problem+json; charset=utf-8
server: Microsoft-IIS/10.0
x-powered-by: ASP.NET
date: Thu, 19 Dec 2019 13:10:01 GMT
content-length: 147
X-Firefox-Spdy: h2
and the sent parameters are:
{"username":"jeboimarc2","password":"KUTminor1!"}
Which is also correct
Can anyone tell me why i am getting the unsupported media type error? Thanks in advance.
Pass raw json data, don't convert it to string.
Try like this:
return this.http.post<any>(`https://${config.apiUrl}/api/User/LoginUser`,{"username": username, "password": password })
I am using .Net ASP Web API V2 with Angular 1 and Auth0.
After initial login through Auth0 I am getting the following error:
XMLHttpRequest cannot load localhost:3001/profile. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost:62379' is therefore not allowed access. The response had HTTP status code 500.
If I refresh I no longer get the error. If I clear the browser data I get the error again but get success after a refresh.
I have CORS enabled in the API config with the required NUGET packages.
I have tried the following solutions because I thought this was a pre-flight issue:
1) Handling the SELECT verb on the controller and globally by intercepting the request.
http://www.jefclaes.be/2012/09/supporting-options-verb-in-aspnet-web.html
2) Adding the select verb as one of the accepted verbs on the controller method.
3) Various answers I have found on here for changing the request.
** I can not share links my rep is too low.
etc.
4) Using a specific origin instead of *
The Controller:
[Route("profile")]
[EnableCors(origins: "*", headers: "*", methods: "OPTIONS")]
public HttpResponseMessage Options()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Headers.Add("Access-Control-Allow-Origin", "*");
resp.Headers.Add("Access-Control-Allow-Methods", "*");
return resp;
}
[Route("profile")]
[EnableCors(origins: "*", headers: "*", methods: "POST")]
[HttpPost]
public object Post([FromBody]dynamic data)
{
string email = null;
var b = new object();
try
{
**** Logic ****
}
catch (Exception ex)
{
**** Return Error ****
}
return b;
}
API Config
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
// Web API configuration and services
config.EnableCors(cors);
var clientID = WebConfigurationManager.AppSettings["auth0:ClientId"];
var clientSecret = WebConfigurationManager.AppSettings["auth0:ClientSecret"];
config.MessageHandlers.Add(new JsonWebTokenValidationHandler()
{
Audience = clientID, // client id
SymmetricKey = clientSecret // client secret
});
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
The Angular Request
function postLogin() {
var loginPackage = [];
if (token === null) token = store.get('token');
if (store.get('profile') != null) {
loginPackage = store.get('profile');
}
return $q(function(resolve, reject) {
$http({
method: 'Post',
url: BASE + 'profile',
data: loginPackage,
crossDomain: true,
xhrFields: {
withCredentials: true
},
contentType: 'application/json'
})
.success(function(data, status) {
*** Logic ***
resolve(function() {
resolve(true);
});
})
.error(function(data, status) {
reject(function() {
});
});
});
}
I think I may have been looking at this for too long and have overlooked something fairly simple.
////**** Update ****////
Response:
HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaWFteWFcRGVza3RvcFxOZXcgZm9sZGVyICgzKVx3ZWJhcGlcQXBpXHByb2ZpbGU=?=
X-Powered-By: ASP.NET
Date: Sun, 08 Jan 2017 00:17:26 GMT
Content-Length: 709
//* UPDATE *///
With a clean browser cache REQUEST (Fails)
POST /profile HTTP/1.1
Host: localhost:3001
Connection: keep-alive
Content-Length: 2372
Accept: application/json, text/plain, */*
Origin: http://localhost:62379
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Authorization: Bearer null
Content-Type: application/json;charset=UTF-8
Referer: http://localhost:62379/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
I thought this may be the pre-flight but it is my understanding that would be with the OPTIONS verb not the POST verb.
The authorisation is not correctly set by the looks of it.
Authorization: Bearer null
The Response:
HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaWFteWFcRGVza3RvcFxOZXcgZm9sZGVyICgzKVx3ZWJhcGlcQXBpXHByb2ZpbGU=?=
X-Powered-By: ASP.NET
Date: Sun, 08 Jan 2017 00:31:49 GMT
Content-Length: 709
A second Post is sent immediately after and is successful. It is actually the pre-flight.
The Request:
OPTIONS /profile HTTP/1.1
Host: localhost:3001
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:62379
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Access-Control-Request-Headers: authorization, content-type
Accept: */*
Referer: http://localhost:62379/index.html
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
And the Response:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/10.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: authorization,content-type
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaWFteWFcRGVza3RvcFxOZXcgZm9sZGVyICgzKVx3ZWJhcGlcQXBpXHByb2ZpbGU=?=
X-Powered-By: ASP.NET
Date: Sun, 08 Jan 2017 00:34:43 GMT
Content-Length: 0
Because of this I can not get beyond the login view. The loading screen sits on error. If I refresh and login again there is no error.
The Request:
POST /profile HTTP/1.1
Host: localhost:3001
Connection: keep-alive
Content-Length: 2367
Accept: application/json, text/plain, */*
Origin: http://localhost:62379
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3ltdC5hdXRoMC5jb20vIiwic3ViIjoiZmFjZWJvb2t8MTAxNTM4MjIxOTc4MTIyNTEiLCJhdWQiOiJWWDhHMFMyUWM5cUFjYnRrM09pMVZMa2NkWGxnWlBtZSIsImV4cCI6MTQ4Mzg3MTMyNywiaWF0IjoxNDgzODM1MzI3fQ.HBQcGC6aad2pLaq3nPuhojrFT2b6Usv64p97b-DCRCU
Content-Type: application/json;charset=UTF-8
Referer: http://localhost:62379/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
The Authorization field now has the token instead of the null value:
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3ltdC5hdXRoMC5jb20vIiwic3ViIjoiZmFjZWJvb2t8MTAxNTM4MjIxOTc4MTIyNTEiLCJhdWQiOiJWWDhHMFMyUWM5cUFjYnRrM09pMVZMa2NkWGxnWlBtZSIsImV4cCI6MTQ4Mzg3MTMyNywiaWF0IjoxNDgzODM1MzI3fQ.HBQcGC6aad2pLaq3nPuhojrFT2b6Usv64p97b-DCRCU
The response is success and login proceeds.
The token seems to be injected only after a refresh.
My AUTH0 Config is:
authProvider.init({
domain: A0_DOMAIN,
clientID: A0_CLIENT,
callbackUrl: location.href,
loginState: 'out.login',
options:options
});
var refreshingToken = null;
jwtInterceptorProvider.tokenGetter = function(store, jwtHelper) {
var token = store.get('token');
var refreshToken = store.get('refreshToken');
if (token) {
if (!jwtHelper.isTokenExpired(token)) {
return store.get('token');
} else {
if (refreshingToken === null) {
refreshingToken = auth.refreshIdToken(refreshToken)
.then(function(idToken) {
store.set('token', idToken);
return idToken;
})
.finally(function() {
refreshingToken = null;
});
}
}
}
};
jwtOptionsProvider.config({
whiteListedDomains: ['localhost','https://www.ymtechno.com','https://www.ymtechno.com/_api','https://ymtechno.com/_api']
});
$httpProvider.interceptors.push('jwtInterceptor');
})
.run(function($rootScope, auth, store, jwtHelper, $location) {
var refreshingToken = null;
$rootScope.$on('$locationChangeStart',
function() {
var token = store.get('token');
var refreshToken = store.get('refreshToken');
if (token) {
if (!jwtHelper.isTokenExpired(token)) {
auth.authenticate(store.get('profile'), token);
} else {
if (refreshingToken === null) {
refreshingToken = auth.refreshIdToken(refreshToken)
.then(function(idToken) {
store.set('token', idToken);
return idToken;
})
.finally(function() {
refreshingToken = null;
});
return refreshingToken;
} else {
$location.path('login');
}
}
}
});
auth.hookEvents();
After investigating I found the interceptor was not putting the token into the auth header until the application was restarted. This was read as a CORS error because the request was not meeting the criteria for accessing the API. The token value was undefined.
A more in depth thread about injectors and headers can be found here:
Set HTTP header for one request
in the event that you come across the same issue it is a useful reference.
AngularJs $http.post works fine with http (Non-SSL) post request
But for https requests (SSL-Enabled) it gives 202.
I have tried setting the common Accept or Content-Type headers as suiggested by many
var app = angular.module('myApp', [], function ($httpProvider) {
//$httpProvider.defaults.headers.common = { 'Accept': '*/*' };
$httpProvider.defaults.headers.post = { "Content-Type": "application/x-www-form-urlencoded" };
});
the http post are using shortcut methods
var l_url = "https://.../ABC.svc/Get";
var Data = {};
var res = $http.post(l_url, Data);
res.success(function (data, status, headers, config) {
});
res.error(function (data, status, headers, config) {
});
Below is the request headers
Key Value
Request POST /WCF/abc.svc/Get HTTP/1.1
Content-Type application/x-www-form-urlencoded
Accept application/json, text/plain, */*
Referer https://..../abc.aspx
Accept-Language en-US
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host webapps.adterminals.ae
Content-Length 2
Connection Keep-Alive
Cookie __utma=4766435.232713021.1427716113.1432028677.1437554384.8; __utmz=4766435.1427716113.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.2.232713021.1427716113; ASP.NET_SessionId=mshdtgl1hy0dctzumrl1tt3q; __utmc=4766435; .ASPXAUTH=D3E9D4B2C3BA24CE4F787D90745E97D2FED3C3E601CB3AF2C4168885084D4A97396749D85C5CD59245A42FBF4F95B539F2D0AAD8F27BD0721D07BDA4FB7B4360B56077A334F3E4E409815E4189935B8A02E2D356F34B9C111EB463A0949E4B1915E6872BF7336131179E6D67C297ECED2EB13F3BC2BCB59F96FCA80C8FE794E6
Below are the response headers
Key Value
Response HTTP/1.1 202 Accepted
Server Microsoft-IIS/8.5
X-Powered-By ASP.NET
X-UA-Compatible IE=Edge
Access-Control-Allow-Origin *
Access-Control-Allow-Headers X-Requested-With,Content-Type,Accept
Access-Control-Request-Method POST,GET,PUT,DELETE,OPTIONS
Access-Control-Allow-Methods POST,GET,OPTIONS
Access-Control-Max-Age 1728000
Date Wed, 22 Jul 2015 10:02:21 GMT
Content-Length 0
Any help would be highly appreciated.