vendredi 22 juillet 2016

How we can start using Visual Studio 2015 with .NET Core Tooling


Visual studio is used to improve developer productivity inside the editor, the goal now is to reduce actions and automate it to reduce time lost and focus on the code quality, best practices and limit bugs.
So Microsoft, worked all these years to give the better tool to developer from Visual Studio 2005 until Visual Studio 2015 we can touch the difference between them.
.NET Core RC2 is finally here, and this time it is a “Release Candidate” rather than an RC1 Beta. Now, we talk about .NET Core and its  cross-platform capabilities. This focus on Linux and Mac OS X support has led not only to a new .NET API but also an accompanying implementation and even a set of tools. In this article I will explain  the various .NET Core project types, the details of the new file types and their functions.

Let's start !

Before leveraging .NET Core RC2, we have to do some updates to our tools :
1- Download the .NET Core Tooling Preview 1 for Visual Studio 2015 :Visual Studio 2015 Update 3 and  .NET Core 1.0 for Visual Studio.
2- Install the NuGet Package Manager from bit.ly/27Rmeaj.
3- Create a new project : 
As you can see, there are three project types (Visual C#\Web and Visual C#\.NET Core folders). Each project type generates a different file's type :
Let's take a look to the structure of every project in this figure : 
As we can see, we can't find App.config or <appname>.config that was used from .NET Framework 1.0 as configuration file but we still have Web.config for ASP.NET Core Web Application (.NET Core). 
Properties\AssemblyInfo.cs : exist in Class Library and Console Application, it identifies the assembly data such as configuration, company, product and trademark. It was released in 2000.
Class1.cs
is a skeleton C# class file for the Class1 class and includes its default constructor, we found it in Class Library instead of Program.cs.
Global.json : is generated automatically for  every .NET Core project; it's used to for project’s node to identifies additional locations for source code when debugging.
Properties\launchSettings.json :  identifies the various Web hosting configuration settings: for example, by .NET Core Configuration we can identify the environment (development, test or production); SSL and authentication. Changes made from the Debug tab on Project Properties Window of Visual Studio provide a UI for editing the launchSettings.json file, as shown in this figure : 
Project.json is a new project file used in all .NET Core projects, It identifies lot of things like project references, build options (the version number), and identifies the platform to compile to—whether .NET Core or .NET Framework, it's build to replace the NuGet File Manager package.config file because it identifies the NuGet references for the project. it specify the frameworks supported in the project and the configuration required, it identify the target platform for self-contained apps. Note that the project is a portable app, project.json identifies which frameworks the project expects to be installed on the target machine on which the assembly will execute.
Project.lock.json : store the list of file like Nuget References that the project need them to compile. It includes also specific package version numbers, unlike the project.json file, which supports wildcards. If we delete it we have to restore all packages.  This file is listed as a child of project.json within Visual Studio.

ClassLibrary.xproj is the MSBuild file that defines what will happen when you build the project.
ClassLibrary.xproj.user overrides the Class­Library.xproj file and provides additional MSBuild properties such as local user debug-specific settings like ports.
Program.cs is used in  Console Application and ASP.NET Core Web Application (.NET Core) projects,it  defines a Program class that includes the definition of the Main entry point for your application even for Web applications.
Web.config : as usual, is used in Web applications and it  provides a minimal configuration for IIS but this file no longer contains app settings, which are instead moved into configuration files that are loaded by Microsoft.Extensions.Configuration. (see more details : https://msdn.microsoft.com/en-us/magazine/mt632279.aspx) 
Note that when we create a new project, all the source code are placed into a src subdirectory for the solution and for test projects , they are placed into a test directory alongside src.
Let's recapitulate : 

How we can start using Visual Studio 2015 with .NET Core Tooling


Visual studio is used to improve developer productivity inside the editor, the goal now is to reduce actions and automate it to reduce time lost and focus on the code quality, best practices and limit bugs.
So Microsoft, worked all these years to give the better tool to developer from Visual Studio 2005 until Visual Studio 2015 we can touch the difference between them.
.NET Core RC2 is finally here, and this time it is a “Release Candidate” rather than an RC1 Beta. Now, we talk about .NET Core and its  cross-platform capabilities. This focus on Linux and Mac OS X support has led not only to a new .NET API but also an accompanying implementation and even a set of tools. In this article I will explain  the various .NET Core project types, the details of the new file types and their functions.

Let's start !

Before leveraging .NET Core RC2, we have to do some updates to our tools :
1- Download the .NET Core Tooling Preview 1 for Visual Studio 2015 :Visual Studio 2015 Update 3 and  .NET Core 1.0 for Visual Studio.
2- Install the NuGet Package Manager from bit.ly/27Rmeaj.
3- Create a new project : 
As you can see, there are three project types (Visual C#\Web and Visual C#\.NET Core folders). Each project type generates a different file's type :
Let's take a look to the structure of every project in this figure : 
As we can see, we can't find App.config or <appname>.config that was used from .NET Framework 1.0 as configuration file but we still have Web.config for ASP.NET Core Web Application (.NET Core). 
Properties\AssemblyInfo.cs : exist in Class Library and Console Application, it identifies the assembly data such as configuration, company, product and trademark. It was released in 2000.
Class1.cs
is a skeleton C# class file for the Class1 class and includes its default constructor, we found it in Class Library instead of Program.cs.
Global.json : is generated automatically for  every .NET Core project; it's used to for project’s node to identifies additional locations for source code when debugging.
Properties\launchSettings.json :  identifies the various Web hosting configuration settings: for example, by .NET Core Configuration we can identify the environment (development, test or production); SSL and authentication. Changes made from the Debug tab on Project Properties Window of Visual Studio provide a UI for editing the launchSettings.json file, as shown in this figure : 
Project.json is a new project file used in all .NET Core projects, It identifies lot of things like project references, build options (the version number), and identifies the platform to compile to—whether .NET Core or .NET Framework, it's build to replace the NuGet File Manager package.config file because it identifies the NuGet references for the project. it specify the frameworks supported in the project and the configuration required, it identify the target platform for self-contained apps. Note that the project is a portable app, project.json identifies which frameworks the project expects to be installed on the target machine on which the assembly will execute.
Project.lock.json : store the list of file like Nuget References that the project need them to compile. It includes also specific package version numbers, unlike the project.json file, which supports wildcards. If we delete it we have to restore all packages.  This file is listed as a child of project.json within Visual Studio.

ClassLibrary.xproj is the MSBuild file that defines what will happen when you build the project.
ClassLibrary.xproj.user overrides the Class­Library.xproj file and provides additional MSBuild properties such as local user debug-specific settings like ports.
Program.cs is used in  Console Application and ASP.NET Core Web Application (.NET Core) projects,it  defines a Program class that includes the definition of the Main entry point for your application even for Web applications.
Web.config : as usual, is used in Web applications and it  provides a minimal configuration for IIS but this file no longer contains app settings, which are instead moved into configuration files that are loaded by Microsoft.Extensions.Configuration. (see more details : https://msdn.microsoft.com/en-us/magazine/mt632279.aspx) 
Note that when we create a new project, all the source code are placed into a src subdirectory for the solution and for test projects , they are placed into a test directory alongside src.
Let's recapitulate : 

mercredi 22 juin 2016

Mon anniversaire - Notes personnels



Comme chaque année, une tradition respectée, le jour de mon anniversaire est un jour spécifique et important car j'établis un bilan analytique afin de déterminer la différence entre l'année dernière et cette année, de tous les niveaux. Une analyse des causes et d'amélioration sera établi à la fin dans le but de mettre un plan d'action pour l'année qui suit.
Du point de vue professionnel , une légère évolution dans la société ARDIA (http://ardia.com.tn/) en mois de janvier donc je suis ingénieur en développement .NET senior dont mes fonctions des bases de plus de la conception et d'analyses des données sont ;

- Assurer un support technique.


- Architecte technique (NLayers).

- Développement des solutions adaptées aux besoins du client d'ARDIA.
- Assurer la mise en application de la méthodologie Agile scrum (en utilisant Jira comme outil).
À mon avis de point de vue professionnel, aucune évolution remarquable de tous les niveaux, j'essaie toujours à garder une veille technologique vue l'évolution rapide des technologies de Microsoft.

Depuis 2 ans, je travaillais dans un projet Social appelé AlloTabib, ce projet a une valeur personnelle pour moi, se concentrer à digitaliser le secteur médical est très difficile en Tunisie, car d'après mes constats, il y a encore des médecins qui utilisent les papiers pour garder trace et ils ne connaissent de l'internet que Facebook, on n'arrive même pas à trouver leurs profils dans internet. 


Alors convaincre un médecin à utiliser un projet Cloud pareil n'est pas aussi simple. Mais nous avons travaillé moi et mon mari à faire évoluer AlloTabib afin de répondre aux besoins des médecins et produire une solution Saas spécifique et déterminée. 


Malgré nos engagements personnels et professionnels, nous avons décidé de casser la routine (boulot et maison) afin de créer une ambiance d'apprentissage et surtout être utile à produire quelque chose ayant une valeur ajoutée pour les citoyens tunisiens. Nous avons donc commencé notre aventure en 2015 dont le but est de participer aux compétitions.


Je reviens vers cet article  rédigé en janvier 2016 : https://www.linkedin.com/pulse/welcome-2016-challenges-hamida-rebai-trabelsi?trk=pulse_spock-articles


Cette année, 2016, sortant d'une compétition nationale au demi-final présenté par mon mari Andi Fekra (http://andifekra.tn), AlloTabib a été choisit parmi des milliers de projet dans le monde arabe en tant que finalistes arabes dans la compétition : Arab Mobile challenge 2016 (http://www.arabmobilechallenge.com), une expérience inoubliable (pitching, coaching, networking ...) dont j'ai appris des choses et j'ai rencontré des jeunes ambitieux. 



Et le grand défi est d'être choisi parmi des milliers de candidatures à assister au sommet global d'entrepreneuriat 2016 aux Silicon Valley en tant que délégué: (http://www.ges2016.org) . 

C'est un événement très important, ce sommet, 7ème édition du GES, a déjà été abrité par les États-Unis et les gouvernements de la Turquie, des Émirats Arabes-Unis, de la Malaisie, du Maroc, et du Kenya. L’édition 2016 du sommet mondial de l’entrepreneuriat se tient cette année aux Silicon Valley à Stanford University sur invitation du Président Barack OBAMA. 700 invités ont été choisis sur une liste de 10 000 potentiels candidats à travers le monde dont j'y suis.

http://africanmanager.com/tunisie-9-entrepreneurs-au-sommet-mondial-de-lentreprenariat/

AlloTabib est une solution développé en utilisant les nouvelles technologies .NET, met en oeuvre une architecture N-Tiers ( nLayer : Couche domain, Infrastructure, service, présentation...) et Domain Driven Design (Entities, Repositories, Domain/Application Services, DTO's...),il est implémenté en utilisant les meilleures pratiques telles que l'injection de dépendance IoC et pour ORM: Fluent NHibernate et le système de Log est optimisé utilisant Log4Net car il faut toujours garder trace pour la maintenance

Les derniers techniques ASP. NET MVC & Web API sont implémentés dans ce projet côté serveur. Sans oublier la couche présentation qui est développée en utilisant SPA: AngularJsBootstrap ... Donc, AlloTabib est un outil puissant vu qu'il utilise plusieurs technologies, en garantissant aussi une sécurité des données. AlloTabib est déployé sous Windows Azure, qui est nouveau pour moi donc à travers AlloTabib j'ai acquis des connaissances et je commence à préparer pour avoir certificat dans ce niveau afin d'évoluer dans ma carrière.

AlloTabib a été choisit aussi dans le programme de Microsoft Bizspark (https://www.microsoft.com/bizspark/startup/profile.aspx?Startup=556012) qui supportent les jeunes à déployer leurs projets sous Azure avec des services totalement gratuits comme les outils msdn, Windows, Office 365 (https://www.microsoft.com/bizspark/startup/default.aspx#/benefits). 

AlloTabib commence à avoir une présence médiatique très forte dans alarabiya, bonjouridee, thd, wajjahni, arabnet, gistnetwork ...


Après 7 ans d'expérience professionnelle, l'objectif est d'évoluer autrement, j'ai décidé de commencer mes préparations pour devenir MVP (https://mvp.microsoft.com) dans le développement des solutions web en utilisant les technologies .NET (Visual Studio and Development Technologies) pour la Tunisie, mais le problème est que malgré l’existence des compétences tunisiennes dans ce  domaine, il n'y a pas de communauté lié donc j'ai décidé de la créer avec d'autres doués par ces technologies : http://dotnet-tunisian-community.azurewebsites.net/ et jusqu'à aujourd'hui je suis satisfaite de l'évolution de cette communauté et des membres compétents qui s’entraident. (https://www.linkedin.com/groups/8494867) 
Mon blog : http://hamidarebai.blogspot.it/ dont je partage mes connaissances et mes tests sur les nouvelles technologies;


Durant cette année, j'ai passé par des échecs et par des réussites, il faut toujours apprendre et comme je l'ai dis et je le dis toujours en anglais :

http://english.alarabiya.net/en/business/economy/2016/06/21/Tunisian-startup-aims-to-be-Google-of-healthcare-in-country.html

vendredi 20 mai 2016

[16 May 2016 ] Microsoft Releases ASP.NET Core RC2


ASP.NET Core RC2 is available today with a lot of change comparing to ASP.NET 5 RC1, numerous improvements , with the updates allowing greater compatibility with more .NET frameworks.
“The release contains the RC2 of the .NET Core runtime and libraries. These libraries are everything that ends up in your ‘bin’ folder when you deploy an application. The tooling included (command-line tools, project tools, and Visual Studio tools) has been declared as a preview 1 release. This change allows those developers who are comfortable with using the runtime to move forward with their projects while the ASP.NET Core tools are completed.”
Microsoft declare that this new version if different from the last one, for example, in last version (RC1) a ASP.NET application that hosts libraries was run by DNX toolchain to execute Startup.cs, but now in the new version (RC2) the code wil be in a Program.co, allowing a single .NET toolchain to be used for ASP.NET Core apps and ASP.NET Hosting libraries.
“As of RC2 an ASP.NET Core application is a .NET Core Console application that calls into ASP.NET specific libraries. What this means for ASP.NET Core apps is that the code that used to live in the ASP.NET Hosting libraries and automatically run your startup.cs now lives inside a Program.cs. This alignment means that a single .NET toolchain can be used for both .NET Core Console applications and ASP.NET Core applications. It also means that customers have more obvious control over the code that hosts and runs their ASP.NET Core app”
IIS support is also integrated into ASP.NET Core RC2, a web server that uses ASP.NET Core Module to configure deploying and hosting applications. Microsoft confirm that RC2 will be rolled out to support Azure Web Applications, with that feature arriving next week.
A great example :
https://wildermuth.com/2016/05/13/Getting-Ready-for-ASP-NET-Core-RC2

For more details :
http://www.asp.net/core

dimanche 8 mai 2016

Global Entrepreneurship Summit 2016 - Tunisian Delegate - Rebaï Hamida


https://news.stanford.edu/2016/02/23/ges-summit-obama-022316/

I don't know how can I present my feeling being selected to this big event is an honor for me and for my country, having a chance to present my carrer, my idea is the most important thing for me, I let these comments explain what anyone can feel ! Thank you GES 2016 to trust me !and for this chance. NEW CHALLENGE for 2016 year and there is always something new.
--
Je ne sais pas comment puis-je présenter mes sentiments d'être choisi pour assister à cet événement , c'est un honneur pour moi et pour mon pays, avoir une chance de présenter mon carrière, mon idée est la chose la plus importante pour moi, je laisse ces commentaires expliquent ce que quelqu'un peut  sentir! Merci GES 2016 pour me faire confiance! Et pour cette opportunité, un nouveau challenge pour l'année 2016 et il y a toujours du nouveau.






mercredi 20 avril 2016

ASP.NET Core on a Linux environment




I will explain  some things related to use of ASP.NET Core Linux,  for the development of a project (environment setup) and for the deployment of an application. This article is based on the version  RC1 of ASP.NET Core tools,  given that APIs, including utilities in command lines can change in the last releases.  We will use Ubuntu 14.04 which is Linux distribution  supported by ASP.NET Core.

Basic configuration of the environment

Installing DNVM

To start configuring and running a first application ASP.NET Core Linux, the first step is to install the runtimes Manager, which will enable us later to install a specific version of the runtime, and finally execute our applications.
On Windows, this runtimes manager is in the simple form of a powershell script. In Linux, there is a dnvm.sh script you can just download. This installation is done through another script (dnvminstall.sh). Nevertheless, the use of that script requires prerequisites: utility unzip (used by the dnvminstall.sh script) and curl (used in the following command and the dnvminstall.sh script).
Run both commands below to get the functional dnvm order.
sudo apt-get install unzip curl
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
Now the DNVM command is usable. Make the test, simply type dnvm in the command prompt and the following result is displayed. However, note that with the previous command, the dnvm.sh script is only installed for the current user.

Installing DNX

sudo apt-get install libunwind8 gettext libssl-dev libcurl4-openssl-dev zlib1g libicu-dev uuid-dev
Once installed these dependencies, it is possible to use the DNVM command to install a version of the runtime. For example, the -r CoreCLR dnvm upgrade instruction will automatically get the latest version of the runtime suitable for .NET Core. Nevertheless, I recommend using the alternative below that allows you to explicitly specify the version of the runtime that you want to install.
dnvm install 1.0.0-rc1-update1 -r coreclr
The switch -r CoreCLR is necessary to clarify that the .NET runtime Core must be installed. Without this switch, the Mono runtime have to be installed. But Mono must also be installed on the server. In the development of your projects, support for .NET Core rather than Mono is more interesting, since it is developed and supported by Microsoft. CoreCLR the runtime for Linux is currently available in 64-bit. Using the -a switch x86 will throw automatically an error asking you to prioritize the use of 64-bit.

Installing libuv

The libuv is used by the HTTP Kestrel server. It is currently the only HTTP server used in an ASP.NET Core Linux. The following instructions will download the sources from the library, compile it and then place it in the charger dynamic system libraries (dlopen).
Note that installing libuv is a mandatory step to run an ASP.NET Core Linux. Without that, it will be impossible to start the application.

Starting a first project

For further, you must have an ASP.NET Core on your Linux machine. You can use either Yeoman (which can be installed with NPM) to generate a new project, and then transfer the sources of an existing application and developed in another environment (eg. Your Windows machine with Visual Studio).

Deployment and hosting solution

 Why use a reverse proxy?

Your ASP.NET Application Core carries its own HTTP server (Kestrel). Nevertheless, it is unusual to expose a single HTTP server to the public. In terms of production architecture, we prefer rather put a reverse proxy in front of the HTTP server and reverse proxy expose this to the public.
The interest of the reverse proxy is then to support anything that is not related to the performance of a piece of code. For example, serving static files, compress HTTP responses, ensuring support for SSL, etc.
Going to production ==> Need full featured web server,reverse proxy just like in IIS with HttpPlatformHandler so install Nginx.

Install Nginx

sudo apt-get install nginx
Once installed, Nginx is present in the form of a service. You then have the option to either restart the machine, either manually start the service.
sudo service nginx start

Nginx configuration

The configuration of the sites exposed by Nginx is done by editing the file in the /etc/nginx/sites-available / default. In my example, I have chosen to redirect site traffic on port 80 to port 5000. I added the crossing different headers to the HTTP request to take forward a Kestrel. Note that the Connection header must absolutely be present, otherwise the replies will not be returned by Kestrel.
Unix sockets are another form of inter-process communication. The operation is very simple, the HTTP server is not configured over a TCP port but compared to a path to a file. In application startup, the HTTP server will create this file, then the monitor. Nginx  will just write to that file every time an incoming request must be sent to the HTTP server.
In terms of configuration, the changes required are very simple. Just tell Nginx the file path to use as socket (via proxy_pass property).
Then, we must also change the commands Node project.json file of Core ASP.NET application. Indeed, until now, I was resting on the default port used by Kestrel (5000). However, I wish now that Kestrel uses the same socket unix as configured with Nginx. The server.urls option to easily override the configuration of Kestrel.

Application Management 

The supervisor application manages the instantiation and possibly automatic instantiation of our application in case of crash.
She moved through the command below.
sudo apt-get install supervisor
Then, the following content is to be placed in the file /etc/supervisor/conf.d/nerddinner.conf.

mardi 5 avril 2016

Migrating an ASP.NET Web API 2 project to ASP.NET MVC 6

If we want to migrate ASP.NET MVC 5 project to ASP.NET Core et ASP.NET MVC 6 projet  is not an easy thing.  the new platform is a profound rewrite of all that existed until now, and this has an impact on the layers and APIs we handle directly into our applications.
Historically, the migration from a version of ASP.NET MVC to an other  was quite simply (essentially by modifying the configuration of the application), you must now expect a greater technical challenge. As part of this post, I wish to focus on the specific case of Web APIs.
Indeed, with ASP.NET Core , ASP.NET Web API brick disappears and it's directly merged with ASP.NET MVC 6. Thus, all types of bases, specific namespaces and extensions to ASP.NET Web API also disappear.
To make life easier for developers facing this kind of migration scenario of an existing ASP.NET Web API  application to ASP.NET MVC 6, Microsoft has decided to distribute a NuGet Microsoft.AspNet.Mvc.WebApiCompatShim package. This is what NuGet package I propose you to discover and manipulate today.

Creating the Project

The first step is to create the file project.json that matches your application. The focus of attention here concerns the expression of dependencies: reference the Microsoft.AspNet.Mvc and Microsoft.AspNet.Mvc.WebApiCompatShim packages. You then get a file similar to the sample file below.
The second step concerns the Startup class. In most of ASP.NET MVC applications, the application starting point is managed by the file Global.asax . We'll have to remove this file and convert its contents to the Startup class. If you have already jumped the step of Owin in your application ASP.NET Web API, you might already have a Startup class. However, syntax changes all with ASP.NET and ASP.NET MVC Core 6.
Then, choose the example  of Startup class provided below. The points of attention here are the way of referencing MVC (with calls to AddMvc and UseMvc) but also referencing Web APIs Shims with AddWebApiConventions instruction.

Gestion du routage

Usually, in projects that use ASP.NET Web API, using the attribute routing is preferred to the manual input of the routing table. However, the package Microsoft.AspNet.Mvc.WebApiCompatShim does not offer full compatibility with the routing attribute as it was available in ASP.NET Web API. Thus, RoutePrefix attribute is not available, and you must convert your code to instead use the Route attribute, latter having a prefix function if you place it in a controller. Finally, the Route attribute must receive a template parameter in its constructor, even, if the template in question is empty. Again, there is a difference with ASP.NET Web API 2 that is not filled by Shims.

Migrating controllers

The next step in migrating an ASP.NET Web API project to ASP.NET MVC 6 is to take all your controllers and models and services they rely on, and add them to your project. In your controller, once modified routing attributes (following the instructions in the previous section of this post), you should have gotten a functional code for ASP.NET MVC 6. Unless your actions using the return type IHttpActionResult. This interface was not brought in Shims, you must replace the IActionResult interface, which is the standard interface of ASP.NET MVC 6.Note that if your use of ASP.NET Web API had made you choose to type your actions with a POCO or with HttpResponseMessage type, you will not encounter problems. Indeed, the last type, and all the mechanisms for generating instances of HttpResponseMessage ** are supported and available through the library ** Microsoft.AspNet.Mvc.WebApiCompatShim.
The Microsoft.AspNet.Mvc.Web Api CompatShim package introduces a new model binder to receive instances of the class HttpRequestMessage parameter of an action. Thus, the following two examples can be written.
You have the ability to easily generate instances of HttpResponseMessage. You may choose to receive the request as an action parameter like in the previous example. You may also take advantage of having your controllers derive from the shim ApiController and this exposes a Request property HttpRequestMessage kind. Thus, the example below is a validated approach for the generation of a response.
In an earlier example, I used the method Ok. Again this is a method exposed by the shim ApiController. There are many others: Created, Conflict, NotFound, etc. These methods were already present in ASP.NET Web API 2. However, the implementation of the shim ApiController is such that a call to these methods will actually return you a type compatible ASP.NET MVC 6. Attention to the type back of your actions !

Error Handling

The type HttpResponseException is also introduced by the pack of shims. Its use is exactly the same with ASP.NET Web API. The example below illustrates this scenario.
Behind the scenes, the exception will be automatically hidden by a filter who will turn it into a classic answer with the correct code and any content that you would have attached. If you have chosen to manipulate instances of HttpRequestMessage and HttpResponseMessage also know that the CreateErrorResponse extension method was raised and is distributed via the shims.

Content Negotiation

Content negotiation is well and truly present with ASP.NET MVC 6, but its implementation is not the same as that available with ASP.NET Web API. However, if your code must refer to IContentNegociatior Service, know that it is accessible with shims.
The example below can then be written and performed with ASP.NET MVC 6

Conclusion

The package Microsoft.AspNet.Mvc.WebApiCompatShim does not  the miracle by migrating automatically for you an application to ASP.NET MVC 6. It does not help you in the migration of customization that you might have made to the tunnel message processing and other levels of API Web framework (controller factory, stock selection, etc.). Nevertheless, it should allow you to be able to resume as is the code of your APIs controllers providing minimal changes to it, which should be able to quickly allow you to compile your application based on the MVC 6.
But remember it is only a compatibility pack and you should seize the first opportunity to actually migrate the code of your APIs controllers to a more consistent approach with ASP.NET MVC 6.