Tag Archives: C#

Web API 2 – ExceptionMessage=No MediaTypeFormatter is available to read an object of type ‘HttpPostedFileBase’ from content with media type ‘multipart/form-data’.

Hi everyone,

I ran into the following error while trying to get image uploads working with Web API 2:

ExceptionMessage=No MediaTypeFormatter is available to read an object of type ‘HttpPostedFileBase’ from content with media type ‘multipart/form-data’.

I had been trying to copy the following from an mvc controller in another project:

public IHttpActionResult Upload(HttpPostedFileBase file, Models.Image.ImageAssociationType associationType, int associationId)

The fix was to use the following instead:

public IHttpActionResult Upload(Models.Image.ImageAssociationType associationType, int associationId)
{
var file = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;

Thanks to this stackoverflow post for the info: https://stackoverflow.com/a/28370156/522859

DbSet does not contain a definition for ‘FromSQL’ and no extension method ‘FromSql’ accepting an argument of type ‘DbSet‘ could be found.

Hi everyone,

I ran into the following error while attempting to use a custom query with EntityFramework:

DbSet does not contain a definition for ‘FromSQL’ and no extension method ‘FromSql’ accepting an argument of type ‘DbSet‘ could be found.

This one’s pretty straight forward:

// Install the following package via nuget
Install-package Microsoft.EntityFrameworkCore.Relational

//Add the following namespace to your file
using Microsoft.EntityFrameworkCore;

Hopefully that’ll solve it for you, but if not there’s a lot a more information in these posts:
https://stackoverflow.com/a/38919326/522859
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/146

Include UserId in Login Response (Token) – Web API 2

Hi everyone,

A quick post on how to include the user’s id in your login response when using Web API 2.

The default response to the /Token request is as follows:

{
“access_token”: “xxxxxxxxxxxxx_xxxx”,
“token_type”: “bearer”,
“expires_in”: 1209599,
“userName”: “test@test.com”,
“.issued”: “Mon, 23 Apr 2018 06:08:03 GMT”,
“.expires”: “Mon, 07 May 2018 06:08:03 GMT”
}

Once the changes below have been made the response will include a userId field:

{
“access_token”: “xxxxxxxxxxxxx_xxxx”,
“token_type”: “bearer”,
“expires_in”: 1209599,
“userName”: “test@test.com”,
“.issued”: “Mon, 23 Apr 2018 06:08:03 GMT”,
“.expires”: “Mon, 07 May 2018 06:08:03 GMT”,
“userId”: “xxxxxxx”
}

There are three very small changes required in order to add this functionality.

First, add an additional argument to CreateProperties in ApplicationOAuthProvider.cs

public static AuthenticationProperties CreateProperties(string userName, string userId)
{
IDictionary data = new Dictionary
{
{ "userName", userName },
// Add
{ "userId", userId }
};
return new AuthenticationProperties(data);
}

Pass userId to CreateProperties in ApplicationOauthProvider.

// ApplicationOAuthProvider.cs > GrantResourceOwnerCredentials
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);

// Add user id
AuthenticationProperties properties = CreateProperties(user.UserName, user.Id);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);

Pass userId to CreateProperties in AccountController.

// AccountController.cs > GetExternalLogin
if (hasRegistered)
{
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager, OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
CookieAuthenticationDefaults.AuthenticationType);

// Add userid
AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName, user.Id);
Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);

Unsupported_Grant_Type – MVC Web Api (error)

Hi everyone,

I ran into the following error while attempting to authenticate using .NET Web Api:

POST http://localhost:63720/Token HTTP/1.1
Host: localhost:63720
Content-Type: application/json
Content-Length: 0
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Date: Mon, 16 Apr 2018 14:18:06 GMT
Content-Length: 34

{“error”:”unsupported_grant_type”}

This one was pretty straight forward. Ensure that have the correct content-type:

Content-Type: application/x-www-form-urlencoded

And finally, ensure that you provide a grant type in the request body:

grant_type=password&username=test_username&password=test_password

Thanks to the following stackoverflow post for the info: https://stackoverflow.com/a/29261024/522859

Exited with code 9009 – Visual Studio Build

Hey everyone,

I ran into the following error today while attempting to build a solution:

combiner exited with code 9009

It apparently means that a file couldn’t be found. The solution was to simply restart visual studio.

I’d been manually adding them to the directory and this is apparently a common cause. See the following Stackoverflow post for more info: https://stackoverflow.com/a/28198020/522859

Unilateral receiver not allowed in chained payment is restricted – Adaptive Payment DotNet SDK

Hey everyone,

Just an error I ran into today while using the Adaptive Payments SDK for C#/.NET:

Unilateral receiver not allowed in chained payment is restricted

Thankfully this one is fairly simple – one of the receivers hasn’t confirmed their account.

http://stackoverflow.com/a/32816078/522859

Could not find part of the path ‘C:\x\lib’ – Adding new Web API Project

Hey everyone,

I ran into the following error when I tried to add a new Web API project in Visual Studio Express 2015 for Web:

Could not find part of the path ‘C:\x\lib’

The workaround for this was to temporarily unbind the project from TFS: File > Source Control > Advanced > Change Source Control > Click unbind on each of the projects

While not the same problem, this post helped me out: https://github.com/NuGet/Home/issues/1164

Culture Info Codes

Hey everyone,

Just posting a link to this list of culture info codes etc. I was looking for the en-AU one but had a bit of trouble tracking it down.

Language Culture Name Display Name Culture Code ISO 639x Value
af-ZA Afrikaans – South Africa 0x0436 AFK
sq-AL Albanian – Albania 0x041C SQI
ar-DZ Arabic – Algeria 0x1401 ARG
ar-BH Arabic – Bahrain 0x3C01 ARH
ar-EG Arabic – Egypt 0x0C01 ARE
ar-IQ Arabic – Iraq 0x0801 ARI
ar-JO Arabic – Jordan 0x2C01 ARJ
ar-KW Arabic – Kuwait 0x3401 ARK
ar-LB Arabic – Lebanon 0x3001 ARB
ar-LY Arabic – Libya 0x1001 ARL
ar-MA Arabic – Morocco 0x1801 ARM
ar-OM Arabic – Oman 0x2001 ARO
ar-QA Arabic – Qatar 0x4001 ARQ
ar-SA Arabic – Saudi Arabia 0x0401 ARA
ar-SY Arabic – Syria 0x2801 ARS
ar-TN Arabic – Tunisia 0x1C01 ART
ar-AE Arabic – United Arab Emirates 0x3801 ARU
ar-YE Arabic – Yemen 0x2401 ARY
hy-AM Armenian – Armenia 0x042B  
Cy-az-AZ Azeri (Cyrillic) – Azerbaijan 0x082C  
Lt-az-AZ Azeri (Latin) – Azerbaijan 0x042C  
eu-ES Basque – Basque 0x042D EUQ
be-BY Belarusian – Belarus 0x0423 BEL
bg-BG Bulgarian – Bulgaria 0x0402 BGR
ca-ES Catalan – Catalan 0x0403 CAT
zh-CN Chinese – China 0x0804 CHS
zh-HK Chinese – Hong Kong SAR 0x0C04 ZHH
zh-MO Chinese – Macau SAR 0x1404  
zh-SG Chinese – Singapore 0x1004 ZHI
zh-TW Chinese – Taiwan 0x0404 CHT
zh-CHS Chinese (Simplified) 0x0004  
zh-CHT Chinese (Traditional) 0x7C04  
hr-HR Croatian – Croatia 0x041A HRV
cs-CZ Czech – Czech Republic 0x0405 CSY
da-DK Danish – Denmark 0x0406 DAN
div-MV Dhivehi – Maldives 0x0465  
nl-BE Dutch – Belgium 0x0813 NLB
nl-NL Dutch – The Netherlands 0x0413  
en-AU English – Australia 0x0C09 ENA
en-BZ English – Belize 0x2809 ENL
en-CA English – Canada 0x1009 ENC
en-CB English – Caribbean 0x2409  
en-IE English – Ireland 0x1809 ENI
en-JM English – Jamaica 0x2009 ENJ
en-NZ English – New Zealand 0x1409 ENZ
en-PH English – Philippines 0x3409  
en-ZA English – South Africa 0x1C09 ENS
en-TT English – Trinidad and Tobago 0x2C09 ENT
en-GB English – United Kingdom 0x0809 ENG
en-US English – United States 0x0409 ENU
en-ZW English – Zimbabwe 0x3009  
et-EE Estonian – Estonia 0x0425 ETI
fo-FO Faroese – Faroe Islands 0x0438 FOS
fa-IR Farsi – Iran 0x0429 FAR
fi-FI Finnish – Finland 0x040B FIN
fr-BE French – Belgium 0x080C FRB
fr-CA French – Canada 0x0C0C FRC
fr-FR French – France 0x040C  
fr-LU French – Luxembourg 0x140C FRL
fr-MC French – Monaco 0x180C  
fr-CH French – Switzerland 0x100C FRS
gl-ES Galician – Galician 0x0456  
ka-GE Georgian – Georgia 0x0437  
de-AT German – Austria 0x0C07 DEA
de-DE German – Germany 0x0407  
de-LI German – Liechtenstein 0x1407 DEC
de-LU German – Luxembourg 0x1007 DEL
de-CH German – Switzerland 0x0807 DES
el-GR Greek – Greece 0x0408 ELL
gu-IN Gujarati – India 0x0447  
he-IL Hebrew – Israel 0x040D HEB
hi-IN Hindi – India 0x0439 HIN
hu-HU Hungarian – Hungary 0x040E HUN
is-IS Icelandic – Iceland 0x040F ISL
id-ID Indonesian – Indonesia 0x0421  
it-IT Italian – Italy 0x0410  
it-CH Italian – Switzerland 0x0810 ITS
ja-JP Japanese – Japan 0x0411 JPN
kn-IN Kannada – India 0x044B  
kk-KZ Kazakh – Kazakhstan 0x043F  
kok-IN Konkani – India 0x0457  
ko-KR Korean – Korea 0x0412 KOR
ky-KZ Kyrgyz – Kazakhstan 0x0440  
lv-LV Latvian – Latvia 0x0426 LVI
lt-LT Lithuanian – Lithuania 0x0427 LTH
mk-MK Macedonian (FYROM) 0x042F MKD
ms-BN Malay – Brunei 0x083E  
ms-MY Malay – Malaysia 0x043E  
mr-IN Marathi – India 0x044E  
mn-MN Mongolian – Mongolia 0x0450  
nb-NO Norwegian (Bokmål) – Norway 0x0414  
nn-NO Norwegian (Nynorsk) – Norway 0x0814  
pl-PL Polish – Poland 0x0415 PLK
pt-BR Portuguese – Brazil 0x0416 PTB
pt-PT Portuguese – Portugal 0x0816  
pa-IN Punjabi – India 0x0446  
ro-RO Romanian – Romania 0x0418 ROM
ru-RU Russian – Russia 0x0419 RUS
sa-IN Sanskrit – India 0x044F  
Cy-sr-SP Serbian (Cyrillic) – Serbia 0x0C1A  
Lt-sr-SP Serbian (Latin) – Serbia 0x081A  
sk-SK Slovak – Slovakia 0x041B SKY
sl-SI Slovenian – Slovenia 0x0424 SLV
es-AR Spanish – Argentina 0x2C0A ESS
es-BO Spanish – Bolivia 0x400A ESB
es-CL Spanish – Chile 0x340A ESL
es-CO Spanish – Colombia 0x240A ESO
es-CR Spanish – Costa Rica 0x140A ESC
es-DO Spanish – Dominican Republic 0x1C0A ESD
es-EC Spanish – Ecuador 0x300A ESF
es-SV Spanish – El Salvador 0x440A ESE
es-GT Spanish – Guatemala 0x100A ESG
es-HN Spanish – Honduras 0x480A ESH
es-MX Spanish – Mexico 0x080A ESM
es-NI Spanish – Nicaragua 0x4C0A ESI
es-PA Spanish – Panama 0x180A ESA
es-PY Spanish – Paraguay 0x3C0A ESZ
es-PE Spanish – Peru 0x280A ESR
es-PR Spanish – Puerto Rico 0x500A ES
es-ES Spanish – Spain 0x0C0A  
es-UY Spanish – Uruguay 0x380A ESY
es-VE Spanish – Venezuela 0x200A ESV
sw-KE Swahili – Kenya 0x0441  
sv-FI Swedish – Finland 0x081D SVF
sv-SE Swedish – Sweden 0x041D  
syr-SY Syriac – Syria 0x045A  
ta-IN Tamil – India 0x0449  
tt-RU Tatar – Russia 0x0444  
te-IN Telugu – India 0x044A  
th-TH Thai – Thailand 0x041E THA
tr-TR Turkish – Turkey 0x041F TRK
uk-UA Ukrainian – Ukraine 0x0422 UKR
ur-PK Urdu – Pakistan 0x0420 URD
Cy-uz-UZ Uzbek (Cyrillic) – Uzbekistan 0x0843  
Lt-uz-UZ Uzbek (Latin) – Uzbekistan 0x0443  
vi-VN Vietnamese – Vietnam 0x042A VIT

Source: https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspx

This type of fee payer x isn’t recognized by our system – PayPal Adaptive Payments SDK

Hey everyone,

Just another Adaptive Payments SDK error I’ve run into.

Error Id: 560027
This type of fee payer x isn’t recognized by our system

This one is fairly self explanatory, valid values are as follows:

SENDER – Sender pays all fees (for personal, implicit simple/parallel payments; do not use for chained or unilateral payments)
PRIMARYRECEIVER – Primary receiver pays all fees (chained payments only)
EACHRECEIVER – Each receiver pays their own fee (default, personal and unilateral payments)
SECONDARYONLY – Secondary receivers pay all fees (use only for chained payments with one secondary receiver)

This parameter is described in the following documentation: https://developer.paypal.com/docs/classic/api/adaptive-payments/Pay_API_Operation/

Cannot parse *.config file – AdaptivePayments SDK (PayPal)

Hey everyone,

Just working on a small project that uses PayPal’s C# AdaptivePayments SDK. I hit an error while attempting to make the following payment:

var service = new AdaptivePaymentsService();
payResponse = service.Pay(payRequest);
“Cannot parse *.config file. Ensure you have configured the ‘paypal’ section correctly.”

at PayPal.Manager.ConfigManager..ctor()
at PayPal.Manager.ConfigManager.get_Instance()
at PayPal.BasePayPalService..ctor()
at PayPal.AdaptivePayments.AdaptivePaymentsService..ctor()

It turns out that you need to add the following entries to your Web.config:


To get the account information you’ll need to do the following:
– Go to developer.paypal.com
– Login to your sandbox account
– Go to the dashboard
– Select accounts (from the list of all your sandbox accounts)
– Create a new one or select an existing business account
– Click profile
– Click API Credentials

Note that the steps required to get this configuration seem to change all the time. Hopefully this will be enough to get you on the right track.